vector< pair<int,int> > v;
// using indices for comparing pairs
auto func = [&](int i, int j) { return v[i] > v[j]; };
// set which will store the indices and compare keys using
// func based on values in v
set<int, decltype(func)> index_set(func);
Если у меня есть два одинаковых значения v[0]={1,2}
и v[1]={1,2}
, и я вставлю их в index_set
, то есть
index_set.insert(0);
index_set.insert(1);
Реальность: У меня будеттолько 1 элемент в index_set
(index_set.size()=1
), который является только индексом 0
и индексом 1
не вставлен.
Ожидания: Оба * 0
и 1
должен быть вставлен.
Обоснование: Согласно cplusplus , в нем говорится:
Unique keys
No two elements in the container can have equivalent keys.
Поскольку ключи не эквивалентны (0 != 1
) поэтому набор должен содержать как 0
, так и 1
.Почему это поведение оправдано?Я думаю, что я сбиваю с толку значения ключей для буквальных значений ключей.
Пример Minimal, Complete, Verfiable : Попробуйте этот код на ideone!