首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在std::set上使用set_intersection

无法在std::set上使用set_intersection
EN

Stack Overflow用户
提问于 2014-07-16 07:22:11
回答 1查看 464关注 0票数 3

我正在尝试使用set_intersection,如下所述

代码语言:javascript
复制
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());

我收到最后一行的编译错误

在_OIter std::set_intersection(_IIter1、_IIter1、_IIter2、_IIter2、_OIter)的实例化中,_IIter1 = std::_Rb_tree_const_iterator >;_IIter2 = std::_Rb_tree_const_iterator >;_OIter= std::_Rb_tree_const_iterator >: 将‘const std::pair’作为‘std::pair&std::pair::operator=’的‘this’参数传递,丢弃限定符-fpermissive。

在我使用这些集合和set_intersection时,没有cons函数。

EN

回答 1

Stack Overflow用户

发布于 2014-07-16 07:36:54

不能使用算法直接写入std::set迭代器。所有的集合迭代器都是const,因为更改任何值都会破坏树(同样适用于std::map键-映射迭代器只能修改映射的值)。

即使可以,它也不能工作,因为容器是空的(例如,如果您试图使用std::vector作为目标容器,最终会出现未定义的行为)。

使用std::inserter

代码语言:javascript
复制
std::set_intersection(
  netSet.begin(), netSet.end(),
  portSet.begin(), portSet.end(),
  std::inserter(result, result.end())
);
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24774583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档