Привет я пытаюсь вставить запись в boost :: unordered_map
Карта определяется как
boost::unordered_map<int,Input> input_l1_map;
где Input — это класс
class Input {
int id;
std::string name;
std::string desc;
std::string short_name;
std::string signal_presence;
std::string xpnt;
}
Я использую функцию для вставки записи, как показано ниже
void RuntimeData::hash_table(int id,Input input)
{
this->input_l1_map.insert(id,input);
}
Я прочитал документацию надстройки, он говорит, что функция insert()
вставить данные в контейнер, но когда я компилирую это показывает ошибку.
Где вы найдете такой insert
метод?
std::pair<iterator, bool> insert(value_type const&);
std::pair<iterator, bool> insert(value_type&&);
iterator insert(const_iterator, value_type const&);
iterator insert(const_iterator, value_type&&);
template<typename InputIterator> void insert(InputIterator, InputIterator);
куда value_type
является
typedef Key key_type;
typedef std::pair<Key const, Mapped> value_type;
от Вот
Вы должны использовать this->input_l1_map.insert(std::make_pair(id, input));
insert принимает value_type, который определяется как:
typedef std::pair<Key const, Mapped> value_type;
void RuntimeData::hash_table(int id,Input input)
{
this->input_l1_map.insert(std::make_pair(id,input));
}
ИМО, самый естественный способ написать это было бы
input_l1_map[id] = input;
Allthough
input_l1_map.insert({ id,input }); // C++11
было бы тоже хорошо.
В качестве альтернативы, для пар, хранящихся на карте, будет typedef:
typedef boost::unordered_map<int,Input> InputMap;
InputMap input_l1_map;
Теперь вы можете сделать это явно:
InputMap::value_type item(id, input);
input_l1_map.insert(item);