我正在尝试使用如下所述的set_intersection
std::set<std::pair<char*, int>,FileLinePairComapare > netSet;
std::set<std::pair<char*, int>,FileLinePairComapare > portSet;
std::set<std::pair<char*, int>,FileLinePairComapare> result;
std::set<std::pair<char*, int>,FileLinePairComapare>::iterator it;
std::set_intersection(netSet.begin(),netSet.end(),portSet.begin(),portSet.end(),result.begin());
我在最后一行收到编译错误
实例化'_Oite std :: set_intersection(_IIter1,_IIter1, _IIter2,_IIter2,_Oter)[with _IIter1 = std :: _ Rb_tree_const_iterator&gt ;; _IIter2 = std :: _ Rb_tree_const_iterator&gt ;; _OIter = std :: _ Rb_tree_const_iterator&gt;]':
将'const std :: pair'作为'this'参数传递给 “的std ::对&安培;的std ::对::运算符=(const的 std :: pair&amp;)'丢弃限定符[-fpermissive]
我没有使用这些集合和set_intersection的cons函数。
答案 0 :(得分:9)
您不能使用算法直接写入std::set
迭代器。 所有 set迭代器都是const,并且有充分的理由因为更改任何值会破坏树(同样适用于std::map
键 - map迭代器只能修改映射值。) / p>
即使你可能也行不通,因为容器是空的(例如,如果你试图使用std::vector
作为目标容器,你最终会得到未定义的行为)。
使用std::inserter
std::set_intersection(
netSet.begin(), netSet.end(),
portSet.begin(), portSet.end(),
std::inserter(result, result.end())
);