Unordered_map 访问元素时有奇怪的行为
Unordered_map having strange behavior when accessing elements
我有一个无序的地图,如下所示:
std::unordered_map<std::string, double> payments = { {"8/18", 0.0}, {"7/18", 771.98}, {"6/18", 0.0}, {"5/18", 771.98},
{"4/18", 771.98}, {"3/18", 771.98}, {"2/18", 0.0}, {"1/18", 3859.90},
{"12/17", 771.98}, {"11/17", 0.0}, {"10/17", 1543.96}, {"9/17", 771.98} };
当我这样打印第二个元素时:
for (auto it : payments)
{
std::cout << it.second << " ";
}
我明白了:
0 771.98 0 0 771.98 1543.96 771.98 771.98 771.98 3859.9 771.98
如您所见,我多了一个零,而且顺序不一样。我该如何解决这个问题?
您正在使用 std::unordered_map
。这意味着元素没有按特定顺序存储。您的代码正在运行 "correctly"。如果你想维护订单,那么你需要一个数组,比如 std::pair
的容器,比如 std::vector<std::pair<std::string, double>>
。示例:
int main()
{
std::vector<std::pair<std::string, double>> payments = { {"8/18", 0.0}, {"7/18", 771.98}, {"6/18", 0.0}, {"5/18", 771.98},
{"4/18", 771.98}, {"3/18", 771.98}, {"2/18", 0.0}, {"1/18", 3859.90},
{"12/17", 771.98}, {"11/17", 0.0}, {"10/17", 1543.96}, {"9/17", 771.98} };
for (auto it : payments)
{
std::cout << it.second << " ";
}
}
输出:
0 771.98 0 771.98 771.98 771.98 0 3859.9 771.98 0 1543.96 771.98
我有一个无序的地图,如下所示:
std::unordered_map<std::string, double> payments = { {"8/18", 0.0}, {"7/18", 771.98}, {"6/18", 0.0}, {"5/18", 771.98},
{"4/18", 771.98}, {"3/18", 771.98}, {"2/18", 0.0}, {"1/18", 3859.90},
{"12/17", 771.98}, {"11/17", 0.0}, {"10/17", 1543.96}, {"9/17", 771.98} };
当我这样打印第二个元素时:
for (auto it : payments)
{
std::cout << it.second << " ";
}
我明白了:
0 771.98 0 0 771.98 1543.96 771.98 771.98 771.98 3859.9 771.98
如您所见,我多了一个零,而且顺序不一样。我该如何解决这个问题?
您正在使用 std::unordered_map
。这意味着元素没有按特定顺序存储。您的代码正在运行 "correctly"。如果你想维护订单,那么你需要一个数组,比如 std::pair
的容器,比如 std::vector<std::pair<std::string, double>>
。示例:
int main()
{
std::vector<std::pair<std::string, double>> payments = { {"8/18", 0.0}, {"7/18", 771.98}, {"6/18", 0.0}, {"5/18", 771.98},
{"4/18", 771.98}, {"3/18", 771.98}, {"2/18", 0.0}, {"1/18", 3859.90},
{"12/17", 771.98}, {"11/17", 0.0}, {"10/17", 1543.96}, {"9/17", 771.98} };
for (auto it : payments)
{
std::cout << it.second << " ";
}
}
输出:
0 771.98 0 771.98 771.98 771.98 0 3859.9 771.98 0 1543.96 771.98