Как поместить 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: \ программные файлы (x86) \ Microsoft Visual Studio
10,0 \ VC \ включить \ xfunctional

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

0

Решение

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

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>

3

Другие решения

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

0

По вопросам рекламы [email protected]