繁体   English   中英

使用std :: string作为std :: map的键

[英]Using an std::string as a key for an std::map

我想有一个std :: map(int .NET 4.0)。 我们当然知道地图是一棵树,需要一个运算符<该字符串没有为我们定义。

错误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中有没有办法使用字符串作为地图的关键?

我知道我可以接受该字符串并编写一个函数将其哈希到一个int,但那里的乐趣在哪里?

编辑

我将尽力为大卫解释这一点。 当映射使用比较器结构时,它在发布时崩溃并在调试中失败调试断言。 失败的断言在xtree第1746行。

表达式:无效的运算符<

|中止| |重试| |忽略|

这就是让我相信尽管给地图一个比较器,它仍然向某些路径默认为运算符<进行比较。 我的代码中导致这一点的行是:

CustomObject o = stringObjectMap[key];

错误24错误C2676:二进制'<':'const std :: string'未定义此运算符或转换为预定义运算符可接受的类型c:\\ program files \\ microsoft visual studio 10.0 \\ vc \\ include \\ xfunctional 125 1 FXCMMarketDataServer

当你忘记包含<string>时,这就是VC吐在你脸上的东西。 该标题明确定义了此运算符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM