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+
的原因相同。
该标准尽量不鼓励低效操作,而是优先选择适合作业的容器。
创建所有映射键的向量并非易事,因为这样的向量不与映射一起在内部维护。
如果您确实需要,您当然可以创建它,正如您已经展示的那样。但是该标准希望您知道您可能应该寻找另一种方法。
例如,如果您只想遍历键,则可以遍历整个映射并仅使用每个结果对的第一部分。
此外,标准库旨在为您提供构建块,而不是为了适应所有可能的用例。
据我查看 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+
的原因相同。
该标准尽量不鼓励低效操作,而是优先选择适合作业的容器。
创建所有映射键的向量并非易事,因为这样的向量不与映射一起在内部维护。
如果您确实需要,您当然可以创建它,正如您已经展示的那样。但是该标准希望您知道您可能应该寻找另一种方法。
例如,如果您只想遍历键,则可以遍历整个映射并仅使用每个结果对的第一部分。
此外,标准库旨在为您提供构建块,而不是为了适应所有可能的用例。