Как поместить std::set в std::map

Я объявил std: карту ниже:

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 \ xfunctional

Что я делаю неправильно?

2 ответа

Решение

Прежде всего, это ужасно длинная очередь

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>

Требование использования std::map заключается в том, что тип ключа должен иметь operator <, Кажется, вы получаете сообщение об ошибке в отношении std::string без этого оператора. Убедитесь, что вы включили заголовок строки #include <string>,

Другие вопросы по тегам