在 c++ 中生成字符串到 std::指针列表的映射

Generating a map of strings to std::list of pointers in c++

本文关键字:指针 列表 映射 std c++ 字符串      更新时间:2023-10-16

我正在尝试创建这样的地图。以下代码尝试执行此操作

#include <list>
#include <map>
#include <string>
class IntWithString {
private:
  int a;
  std::string s;
public:
  IntWithString(int a, std::string s) : a(a), s(s) {}
  std::string getString() { return s; }
  int getInt() { return a; }
};
namespace {
std::map<std::string, std::list<IntWithString *> > m;
}
void appendMap(IntWithString *a) {
  auto it = m.find(a->getString());
  if (it != m.end()) {
    m[a->getString()].push_back(a);
  } else {
    std::list<IntWithString *> l;
    l.push_back(a);
    m[a->getString()] = l;
  }
}
int main() {
  IntWithString a(10, "ten");
  IntWithString b(11, "ten");
  appendMap(&a);
  appendMap(&b);
  return 0;
}

但是,当使用调试器查看地图 m 时,我得到一个将"十"映射到大小为 0 的列表的地图。我想要的是大小为 2 的列表。

我不确定你的意思。如果我这样做:

std::cout << m.size() << ", " << m["ten"].size() << std::endl;

我得到这个输出:

1, 2

这是一个映射,具有一个键("十"(,以及该键的两个值(10 和 11(,如预期的那样。

现场演示

PS:将指针存储在这样的容器中在C++中有点不常见。如果您真的想这样做,请考虑使用智能指针。