나는 다중 세트를 가지고 있으며 그 범위를 얻고 있습니다. 나중에 그것을 사용하는 벡터에이 범위를 추가 할이 내가 뭘하는지입니다 :std :: vector에 반복자 범위 삽입하기
class foo
{
public:
int a;
foo(int a) : a(a){}
};
class FooPointerCompare
{
public:
bool operator()(const foo* a, const foo* b)
{
return a->a < b->a;
}
};
std::multiset<foo*, FooPointerCompare> m;
std::vector<std::multiset<foo*, FooPointerCompare>::iterator> v;
auto pair = m.equal_range(new foo(5)); //leak here, I know
v.insert(v.end(), pair.first, pair.second);
그러나 나는 이러한 오류를 얻을 : 나는 간단한 for(auto it = pair.first; it != pair.second; it++) v.push_back(it);
를 사용할 때
No matching constructor for initialization of 'std::__1::__tree_const_iterator<foo *, const std::__1::__tree_node<foo *, void *> *, int>'
No viable overloaded '='
가 작동을 아주. 내 vector::insert
전화에 무엇이 문제가 있습니까? 잘못 무엇
Btw,'foo f (5);를 쓰는 것이 더 쉽습니다. auto pair = m.equal_range (&f);''여기에 누설, 알고있어 라 ';-p –
@SteveJessop true : P, 실제 코드에서 스마트 포인터를 사용했지만 로컬 객체에 대한 참조 –