개인적으로 범위가 지정된 Boost.BiMap을 클래스에 포함하고 있으며이 맵의 일부에 대한 공개 뷰를 내보내려고합니다. 나는 다음과 같은 코드에 대한 두 가지 질문이있다 : 반복 내 방법은 올바른입니다 Value
과 관련된 Point
년대를 얻을 경우사적 영역의 공개 뷰 공개 Boost.BiMap 반복자
class Object {
typedef bimap<
unordered_set_of<Point>,
unordered_multiset_of<Value>
> PointMap;
PointMap point_map;
public:
??? GetPoints(Value v) {
...
}
첫 번째 질문입니다. 아래는 포인트를 반복 할 때 사용하는 코드입니다. 내 질문은 정확히 내가 반복 할 경우, 내가 it->first == value
조건을 포함해야한다는 것을 알았 기 때문에 이것이 잘 알려지지 않을 수도있는 더 나은 인터페이스를 제공해야하는지 확실하지 않았기 때문입니다.
PointMap::right_const_iterator it;
it = point_map.right.find(value);
while (it != point_map.right.end() && it->first == val) {
/* do stuff */
}
두 번째 질문은 발신자에 대한 point_map.right.end()
을 알고 있어야한다는 것 때문에 bimap 반복자를 노출하지 않고합니다 (???
반환 형식 위) GetPoints의 공개 뷰를 제공하는 가장 좋은 방법입니다 것입니다. 참조 또는 집합 목록과 같은 효율적인 구조는 작동하지만 컬렉션을 만드는 방법에 대해서는 약간 분실되어 있습니다.
감사합니다.
두 번째 질문에 대한 첫 번째 접근 방식과 관련하여 PointMap을 공개적으로 범위 화해야합니까? 공개 인터페이스에 일종의 일반 이터레이터를 사용할 수 있습니까? –
PointMap은 여전히 개인이 될 수 있습니다. 예제 코드의 typedef match_iterator는 public이되어야 클래스 외부의 코드에서 사용할 수 있습니다. – user450018