0

我在下面声明了std:map:

std::map<std::string, std::set<unsigned char*>> FilesMap;

int InsertData(unsigned char* name)
{
  // here i try to insert pair with name above and clear std::set
   FilesMap.insert(std::pair<std::string, std::set<unsigned char*>>(std::string((char*)name), std::set<unsigned char*>()));
}

但是我有很多错误,例如:

错误 16 错误 C2676: 二进制 '<': 'const std::string' 未定义此运算符或转换为预定义运算符可接受的类型 c:\program files (x86)\microsoft Visual Studio 10.0\vc\include \x功能

我究竟做错了什么?

4

2 回答 2

3

首先,这条可怕的长线

FilesMap.insert(std::pair<std::string, std::set<unsigned char*>>(std::string((char*)name), std::set<unsigned char*>()));

如果您使用 std::make_pair 函数可以简化,该函数将推断模板参数。

FilesMap.insert(std::make_pair(std::string(reinterpret_cast<char*>name)), std::set<unsigned char*>()));

其次,您可以为您的集合制作一个 typedef 以进一步简化上述行

typedef std::set<unsigned char*> mySetType;
std::map<std::string, mySetType>> FilesMap;
 FilesMap.insert(std::make_pair(std::string(reinterpret_cast<char*>name)), MySetType()));

最后,也是最重要的一点,我认为编译器无法找到适合operator <std::string 的原因是您忘记了#include<string>

于 2012-10-08T15:40:29.820 回答
0

使用 std::map 的要求是键类型必须具有operator <. 关于 std::string 没有此运算符,您似乎遇到了错误。确保您已包含字符串 header #include <string>

于 2012-10-08T15:41:15.907 回答