如何将std :: lower_bound与std :: map结合使用?

时间:2019-10-06 23:28:11

标签: c++ stdmap lower-bound upperbound

我有这个问题:

我有一个std::map字符串,代表整数,代表水果列表:

map<string, int> fruits{
    {"Apple", 5}, {"Grapefruit", 7}, {"Cherry", 10}, {"Grapes", 16}
};


for (const auto& p : fruits)
    cout << p.first << " " << p.second << endl;
cout << endl << endl;


auto it = fruits.begin();
++++it;

using type = std::pair<class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char> > const, int>;

auto it2 = std::lower_bound(fruits.cbegin(), fruits.cend(), type{"Cherry", 10});
//  auto it3 = std::lower_bound(fruits.cbegin(), fruits.cend(), pair<string, int>{ "Cherry", 10 });
auto it4 = std::lower_bound(fruits.cbegin(), fruits.cend(), pair<const string, int>{ "Cherry", 10 });

for (auto beg = fruits.cbegin(); beg != it2; ++beg)
    cout << beg->first << " " << beg->second << endl;

cout << typeid(*it).name() << endl;

所以我的问题是如何将第三个参数显式传递给std::lower_bound

  • 因为从typeid获得帮助后,我注意到这对夫妇的firstconst,是因为键是constants

  • 如果我传递给定键的值与容器中的键不匹配,也会发生什么。例如:键为"Cherry"的元素的值为10,那么为什么我将lower_bound用像value这样的键传递给无效的pair{"Cherry", 345}时,为什么lower_bound可以正常工作?

  • 传递到#include "StackAsLList.h" #include "pch.h" 的货币对的值是任意的吗?

1 个答案:

答案 0 :(得分:6)

不要那样做。 std::map有自己的成员函数lower_bound,因此您不需要比较功能,而且效率也更高。

map的迭代器有first部分const,因为您不能更改它。所使用的数据类型和算法依赖于在整个地图生命周期内保持不变的键值。