У меня есть вопрос:
У меня есть 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
я заметил, что пара first
равна const
, это потому, что ключи constants
?
Также, что произойдет, если я передам значение для данного ключа, который не соответствует ключу в контейнере. Например: элемент с ключом "Cherry"
имеет значение 10
, так почему lower_bound
работает правильно, если я передаю ему недействительный value
с ключом типа pair{"Cherry", 345}
?
Является ли значение пары, переданное в lower_bound
, произвольным?