Поиск по паре ключ-значение

279
07 июля 2017, 06:51

Имеется список на multimap пара ключ-значение. В списке присутствуют не уникальные значения. Необходимо добавить новую пару ключ-значение, если таких нет в списке. Метод find ведет поиск только ключу. Может есть возможность искать именно по ключ-значение?

Answer 1

Вообще говоря, ваша структура данных не очень приспособлена для организации подобного поиска. Тем не менее, есть предложение использовать комбинацию двух поисков. Вначале воспользуемся методом std::multimap::equal_range, сложность которого логарифмическая, и найдём все пары с искомым ключом, затем выполним линейный поиск подходящего значения с помощью std::find_if. Стоит заметить, что таким образом найдётся лишь одна их подходящих пар.

Пример:

#include <algorithm>
#include <iostream>
#include <map>
int main()
{
    std::multimap<int, char> dict {
        {1, 'A'},
        {2, 'B'},
        {2, 'C'},
        {2, 'D'},
        {4, 'E'},
        {3, 'F'},
    };
    // Производится поиск пары {2, 'C'}
    auto range = dict.equal_range(2);
    auto pair = std::find_if(range.first, range.second,
                             [](auto& el){ return el.second == 'C'; });
    if (pair != range.second) {
        std::cout << "Найденo!" << std::endl;
    } else {
        std::cout << "Нету подходящих элементов" << std::endl;
    }
}
READ ALSO
Get playback devices

Get playback devices

Необходимо программно понять, подключено ли какое-то устройство воспроизведения к аудиовыходуИспользуется linux (МСВС)

232
Преобразование типов в с++. Из int в string

Преобразование типов в с++. Из int в string

Каким способами можно выполнить преобразование из инта в строку?

381