Я объявил 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
Что я делаю неправильно?
Прежде всего, это ужасно длинная очередь
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>
,