我想有一个std :: map(int .NET 4.0) . 我们当然知道 Map 是一棵树,需要一个运算符<该字符串没有为我们定义 .
错误24错误C2676:二进制'<':'const std :: string'没有定义此运算符或转换为预定义运算符可接受的类型c:\ program files \ microsoft visual studio 10.0 \ vc \ include \ xfunctional 125 1 FXCMMarketDataServer
所以我把我的google-foo工作并找到了这个解决方案:
struct StringComparerForMap
{
public:
bool operator()(const std::string x, const std::string y)
{
// Add compare logic here
}
};
...
std::map<std::string, CustomObject, StringComparerForMap> myMap;
这种方法运行良好一段时间,现在我遇到了一个我认为是由此导致的错误 . 在STL框架的某个深处,它似乎忽略了上面的定义,默认为operator < .
在VS2010 .NET 4.0中有没有办法使用字符串作为 Map 的关键?
我知道我可以接受该字符串并编写一个函数将其哈希到一个int,但那里的乐趣在哪里?
EDIT
我将尽力为大卫解释这一点 . 当映射使用比较器结构时,它在发布时崩溃并在调试中失败调试断言 . 失败的断言在xtree第1746行 .
表达式:无效的运算符<| Abort | |重试| |忽略|
这就是让我相信尽管给 Map 一个比较器,它仍然向某些路径默认为运算符<进行比较 . 我的代码中导致这一点的行是:
CustomObject o = stringObjectMap[key];
1 回答
当你忘记包括
<string>
时,这就是VC吐在你脸上的东西 . 该 Headers 明确定义了此运算符 .