Поиск определенного значения в std :: map
Возможные дубликаты:
Checking value exist in a std::map - C++
How to traverse a stl map/vector/list/etc?Здравствуйте
Можно ли искать конкретное 9X_cpp значение в std :: map, не зная ключа? Я 9X_cxx знаю, что могу перебирать всю карту и сравнивать 9X_c++ значения, но можно ли использовать функцию 9X_cpp из алгоритмов std?
- Для std :: map вам нужно будет повторить итерацию. В противном случае исполь ...
Ответ #1
Ответ на вопрос: Поиск определенного значения в std :: map
Ну, вы можете использовать std::find_if
:
int main()
{
typedef std::map my_map;
my_map m;
m.insert(std::make_pair(0, "zero"));
m.insert(std::make_pair(1, "one"));
m.insert(std::make_pair(2, "two"));
const std::string s("one");
const my_map::const_iterator it = std::find_if(
m.begin(), m.end(), boost::bind(&my_map::value_type::second, _1) == s
);
}
Но это немного 9X_c++ лучше, чем созданный вручную цикл: он по-прежнему 9X_c++ O(n)
.
- Мне потребовалось некоторое время, чтобы понять использование boost :: bind. Вот несколько указателей, если они кому-то понадобятся: [Привязка переменных-членов] (http://www.boost.org/doc/libs/1_65_1/libs/phoenix ...
Ответ #2
Ответ на вопрос: Поиск определенного значения в std :: map
Вы можете использовать Boost.Bimap, если хотите индексировать 9X_cxx значения, а также ключи. Без этого или чего-то 9X_cxx подобного это придется делать методом грубой 9X_cxx силы (=> сканировать map
вручную).
Boost.Bimap 9X_cpp - это двунаправленные карты библиотека 9X_cpp для C++. С Boost.Bimap вы может создавать 9X_cxx ассоциативные контейнеры в оба типа которых 9X_cpp можно использовать как ключевые.
- @Stas - правда, но это требует больше работы - мой обычный ответ людям, которым «не разрешено использовать Boost», - все равно загружать заголовки и аб ...
Ответ #3
Ответ на вопрос: Поиск определенного значения в std :: map
Это поможет? STL find_if
У вас должен быть какой-то 9X_cpp предикат, либо указатель на функцию, либо 9X_c++ объект с реализованным operator()
. Указанный предикат 9X_cxx должен принимать только один параметр.
Ответ #4
Ответ на вопрос: Поиск определенного значения в std :: map
Есть (неудобные) способы сделать это с помощью 9X_cxx стандартных функций (например, std::find_if
), но они 9X_c++ по-прежнему включают итерацию по всей карте. Boost.Bimap обеспечит 9X_cxx эффективную индексацию в обоих направлениях, и 9X_cxx вы можете пойти еще дальше с Boost.Multi-Index.
-
11
-
3
-
8
-
25
-
4
-
8
-
9
-
11
-
7
-
8
-
4
-
27
-
13
-
3
-
7
-
16
-
18
-
24
-
7
-
7
-
5
-
10
-
29
-
7
-
40
-
8
-
12
-
7
-
20
-
6
-
2
-
7
-
5
-
8
-
12
-
6
-
10
-
5
-
11
-
10
-
7
-
5
-
11
-
3
-
12
-
11
-
6
-
4
-
4
-
7