Найти элементы с ключем меньшим заданнного. Multimap
Каким образом можно получить(найти) элемент, введя через консоль переменную int k, и получив auto itr, чтобы исполнился код по поиску элементов с наименьшим ключом? Или это как-то вообще по другому надо реализовать?
ps Извините и поймите, если что-то коряво и тп, новичок.
int main() {
multimap<int, int> myMultimap;
for (;;) {
//...
case 3: { //Поиск первого элемента с ключом, меньшим заданному ключу
cout << "Задайте ключ, чтобы найти элементы с ключом, меньшим заданному ключу:\n";
cin >> k;
//То что я написал и пытаюсь исполнить для поиска элементов с наименьшим ключом
multimap<int, int>::key_compare comp = myMultimap.key_comp();
//auto itr = myMultimap.find(k);
multimap<char, int>::iterator itr = myMultimap.find(k);
auto it = myMultimap.begin();
do {
cout << (*it).first << " : " << (*it).second << '\n';
} while (comp((*it++).first, itr));
//пытался сделать что-то такое, но не такое...
//for (auto it = myMultimap.begin(); it < myMultimap(i); ++it)
//{
// cout << it->first << " : " << it->second << endl;
//}
}
///...
}
Ответы (2 шт):
Автор решения: pagislav
→ Ссылка
auto it = myMultimap.begin()
for (; it != myMultimap.end() && it->first < k; it++)
{
cout << it->first << " : " << it->second << endl;
}
Итераторы нельзя сравнить на больше или меньше, а только на равенство.
Либо же, можно сразу найти итератор на элемент, ключ которого меньше k.
auto it = myMultimap.lower_bound(k-1);
Автор решения: Harry
→ Ссылка
Перебор всех элементов с ключом, строго меньше k:
for(auto it = myMultimap.begin(); it != myMultimap.lower_bound(k); ++it)
{
cout << it->first << " : " << it->second << '\n';
}
Все, вам не нужно мучиться и сравнивать самостоятельно... В принципе, для ускорения можно написать
for(auto end = myMultimap.lower_bound(k), it = myMultimap.begin(); it != end; ++it)
Описание lower_bound - здесь.