将int映射到C ++中的向量结构

时间:2017-07-07 21:04:22

标签: c++ stdmap

我正在尝试了解std::map的工作原理,我遇到以下问题:

int id; // stores some id

struct stuff {
  std::vector<int> As;
  std::vector<int> Bs;
} stuff;

std::map<int, stuff> smap;

void foo () {
  int count = 2;
  int foo_id = 43;
  for (int i = 0; i < count; count++) {
        stuff.As.push_back(count);
        stuff.Bs.push_back(count);
  }
  smap.insert(foo_id, stuff);
}

目前我得到:

error: type/value mismatch at argument 2 in template parameter list for ‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’
  std::map<int, stuff> smap;

error: request for member ‘insert’ in ‘smap’, which is of non-class type ‘int’
   smap.insert(int, stuff);

我希望能够将id映射到structnumpy由填充在for循环中的两个向量组成。我究竟做错了什么?或者有更好的方法来映射这个吗?

1 个答案:

答案 0 :(得分:5)

stuffstruct定义为} stuff;,但最后stuffstuff重新定义为struct stuff { // stuff is a struct std::vector<int> As; std::vector<int> Bs; } stuff; // stuff is now a variable of type stuff. 类型的变量。

stuff

因此,std::map<int, stuff>没有名为struct stuff_t { std::vector<int> As; std::vector<int> Bs; } stuff; std::map<int, stuff_t> smap; 的类型可供使用。

您可以通过重命名结构类型来解决问题:

SelectElement