c++ - Unordered_map 在访问元素时有奇怪的行为

标签 c++ unordered-map

我有一个无序的 map ,看起来像这样:

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 .这意味着元素没有按特定顺序存储。您的代码“正常”工作。如果您希望维护订单,那么您需要一个类似 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 

关于c++ - Unordered_map 在访问元素时有奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53342930/

相关文章:

c++ - 使用任何参数创建 std::functions 的 unordered_map?

c++ - 如何检查对象实例上的虚函数是某种实现

c++ - 我将类型库 ( .tlb ) 导入到 Delphi 中,但函数参数似乎不正确。我该如何解决?

c++ - boost::unordered_map 是否返回值的引用或拷贝

c++ - 与 C++ unordered_map 的并行性

c++ - 为什么 C++11/Boost `unordered_map` 在删除时不重新散列?

c++ - 为什么打印un_ordered map和map(dictionary)的key和value有异常?

c++ - 如何分别在R和C++中做两个矩阵的矩阵乘积

C++ 从另一个类调用一个函数

c++ - C++ 标准是否允许在没有开销的情况下实现 std::optional<double>