マルチセットがあり、そこから範囲を取得しています。この範囲をベクトルに追加して後で使用したいのですが、これが私がやっていることです:
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);
しかし、私はこれらのエラーが発生します:
No matching constructor for initialization of 'std::__1::__tree_const_iterator<foo *, const std::__1::__tree_node<foo *, void *> *, int>'
No viable overloaded '='
シンプルを使用すると、for(auto it = pair.first; it != pair.second; it++) v.push_back(it);
完全に機能します。vector::insert
通話の何が問題になっていますか?