У меня странная проблема, которую я не знаю, скучаю ли я по чтению документации или мой компьютер делает что-то странное.
У меня есть unordered_map.Я хочу перебирать сегменты unordered_map в порядке сегментов.Эта часть важна, так как мне нужно, чтобы доступ был относительно случайным.Я искал по cplusplus.com и нашел это .Код выглядит следующим образом:
// unordered_map::bucket
#include <iostream>
#include <string>
#include <unordered_map>
int main ()
{
std::unordered_map<std::string,std::string> mymap = {
{"us","United States"},
{"uk","United Kingdom"},
{"fr","France"},
{"de","Germany"}
};
for (auto& x: mymap) {
std::cout << "Element [" << x.first << ":" << x.second << "]";
std::cout << " is in bucket #" << mymap.bucket (x.first) << std::endl;
}
return 0;
}
Вывод, который я ожидал и хотел на моем компьютере, был
Element [us:United States] is in bucket #1
Element [de:Germany] is in bucket #2
Element [fr:France] is in bucket #2
Element [uk:United Kingdom] is in bucket #4
Однако вывод, который я получаю, вместо этого сортируется по типу значения, что странно
Element [de:Germany] is in bucket #2
Element [fr:France] is in bucket #3
Element [uk:United Kingdom] is in bucket #1
Element [us:United States] is in bucket #1
Я даже пытался заменить значение классом, у которого не было операторов сравнения, и он все еще мог их отсортировать.Это связано с тем, как мой компьютер хранит карту, или cplusplus.com устарел?Я был в состоянии перебрать сегменты по циклу, как это:
for ( unsigned int i = 0; i < b.bucket_count(); ++i) {
for ( hash_table::const_local_iterator image_iterator =
b.begin(i);image_iterator!= b.end(i); ++image_iterator ){
Единственная проблема заключается в том, что мне нужно иметь возможность пропустить определенное количество значений, т.е. я хочу только 1 элемент на каждые 100, которыетребует сложных циклов и медленно.
Любая помощь будет оценена.Я не могу понять это!
[EDIT] С моим кодом мое unordered_map фактически является unordered_map, где point - это простой класс, который имеет только две переменные-члена и никаких вспомогательных функций.
Когда я запускаю цикл выше на моей карте, вот мой вывод.Я связал текстовый файл, так как это довольно длинный файл здесь Что меня смущает еще больше, так это то, что в моем классе Point нет операторов сравнения.Может ли это быть причиной моего порядка вставки?