C++ 获取地图的关键字

C++ get keywords of map

据我查看 C++ 参考资料,没有 returns 包含地图所有关键字的矢量(或类似的)的函数。为什么会这样?这不是一个非常重要的功能,但有时它会很有用。 (key_comp这个函数我不是很懂,但这好像不是我要找的)

为了完整起见,这里有一些功能可以满足我的要求:

template<typename key_t, typename value_t>
std::vector<key_t> getKeywords(const std::map<key_t, value_t>& m){
  std::vector<key_t> keywords;
  for(const auto& it: m){
    keywords.push_back(it.first);
  }
  return keywords;
}

两个主要原因是大多数实现本身没有关键字向量,因此他们必须即时创建它。正如您所看到的,创建它并不难,因此几乎不需要将其包含在标准中,

事实上,keys 本身是不可访问的,因为 map class 的关注点是 O(log(N)) 检索,而不是迭代。

作为使用 stl 的一般准则,请根据应用程序的用例选择容器。如果你想要快速迭代,你可以使用 tuple<Key, Value>vector 并对其进行排序,或者使用你手动排序的 pair<vector<Key>, vector<Value>>std::make_heap 等对于这种方法来说很方便。

检索地图键可以像您的实现一样完成。

这与 std::list 迭代器没有 operator+ 的原因相同。

该标准尽量不鼓励低效操作,而是优先选择适合作业的容器。

创建所有映射键的向量并非易事,因为这样的向量不与映射一起在内部维护。

如果您确实需要,您当然可以创建它,正如您已经展示的那样。但是该标准希望您知道您可能应该寻找另一种方法。

例如,如果您只想遍历键,则可以遍历整个映射并仅使用每个结果对的第一部分。

此外,标准库旨在为您提供构建块,而不是为了适应所有可能的用例。