Как поместить 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>
,