【发布时间】:2016-09-28 13:33:42
【问题描述】:
我有一张地图声明为:
std::map< std::pair<int, int>, bool > allPositions; // essentially, keys are just 2D points
我需要获取其值为true的元素的范围
使用std::equal_range
auto range = std::equal_range(allPositions.begin(), allPositions.end(), true);
给出这些错误
错误 C2672 'operator __surrogate_func':没有匹配的重载 功能找到 xutility
错误 C2893 无法专门化函数模板“未知类型” std::less::operator ()(_Ty1 &&,_Ty2 &&) const' xutility
错误 C2056 非法表达式 xutility
错误 C2672 'operator __surrogate_func':没有匹配的重载 函数找到算法
错误 C2893 无法专门化函数模板“未知类型” std::less::operator ()(_Ty1 &&,_Ty2 &&) const' 算法
我想我在这里不需要谓词函数,因为std::pair 已经重载了operator <,否则地图代码将不会被编译
那么如何使用std::equal_range 映射来获得具有相等值的对的范围?
【问题讨论】:
-
不管怎样,相信你还是需要比较功能的。遍历地图将为您提供键值对,而不仅仅是值。而
true默认情况下无法与std::pair<std::pair<int,int>,bool>相比。 -
使用
map:equal_rangeen.cppreference.com/w/cpp/container/map/equal_range -
@Altainia 我知道它给出了对,我的意思是获取值相等的地图元素的范围
-
为此您需要不同的容器,例如 boost::multi_index,
std::map不会根据值为您提供范围。
标签: c++ c++11 visual-c++ stl