我想要一个std :: map(int .NET 4.0)。我们当然知道一张地图是一棵树,并且需要一个字符串没有为我们定义的操作符<。使用std :: string作为std :: map的键
错误24错误C2676:二进制 '<': '常量的std :: string' 不限定此运算符或转换到类型接受的预定义操作C:\程序Files \ Microsoft的Visual Studio 10.0 \ VC \包括\ xfunctional 125 1 FXCMMarketDataServer
所以我把我的谷歌,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;
这一段时间工作得很好,现在我遇到一个bug我相信这是由于这一点。在STL框架内部的某处,似乎忽略了上述定义,并默认为运营商<。
有没有在VS2010 .NET 4.0中使用字符串作为地图的关键的方法?
据我所知,我可以采取该字符串,并写一个函数将其散列到一个int,但在那里的乐趣呢?
编辑
我会尝试尽我所能为大卫解释。当映射使用比较器结构时,它在发行版中崩溃并在调试中失败调试断言。失败的断言是行的XTree 1746
表达:无效操作<
|中止| |重试| |忽略|
那是什么使我相信,尽管给映射比较器,它仍然下来某些路径默认为运营商<进行比较。使这在我的代码行是:
CustomObject o = stringObjectMap[key];
std :: string确实具有所需操作符的合适定义。你确定你已经包含头文件吗?我想我没有看到类似的问题, std :: string的前向声明意味着它的名字本身是已知的。 –
Keith
2011-02-08 22:30:22
.NET与std :: map或std :: string无关 – 2011-02-08 22:41:40