3

嗨,我正在尝试将记录插入 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);

}

我阅读了 boost 文档,它说有一个insert()向容器插入数据的函数,但是当我编译它时显示错误。

4

3 回答 3

3

你在哪里找到这样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));

于 2013-04-05T12:24:26.443 回答
1

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));

}
于 2013-04-05T12:25:07.557 回答
0

IMO 最自然的写法是

input_l1_map[id] = input;

虽然

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);
于 2013-04-05T12:24:14.323 回答