Следующее значение в std :: map - PullRequest
3 голосов
/ 20 января 2010

У меня есть std::map<std::string, float>, поэтому я могу быстро выполнять поиск значений с плавающей точкой на основе имен, но у меня возникла ситуация, когда мне нужно найти следующее значение с плавающей точкой в ​​списке, как если бы оно было отсортировано численно. Насколько я знаю, я не могу просто использовать итератор, поскольку карта отсортирована по ключам. Так что, если мой набор содержит:

std::pair<"One", 1.0>
std::pair<"Two", 2.0>
std::pair<"Three", 3.0>
std::pair<"Four", 4.0>
std::pair<"Five", 5.0>

Если я хочу найти следующее значение после «Три», что будет наиболее эффективным способом сделать это? Ожидаемый результат в этом случае будет 4,0. Я могу перебрать весь список и сохранить максимальное значение вместе с текущим следующим значением. Это лучший способ?

Ответы [ 2 ]

6 голосов
/ 20 января 2010

Вы, вероятно, хотите использовать Boost :: bimap вместо карты нормалей - это обеспечивает эту возможность совершенно напрямую.

1 голос
/ 20 января 2010

Если вы действительно не можете использовать Boost, то можете оставить отдельный набор поплавков рядом с картой (будьте очень осторожны, чтобы синхронизировать их). Тогда вы можете найти то, что вы хотите с двумя поисками:

set<float>::const_iterator found = set.find(map["Three"]);
++found;
assert(*found == 4.0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...