Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问元素时具有奇怪行为的无序_映射_C++_Unordered Map - Fatal编程技术网

C++ 访问元素时具有奇怪行为的无序_映射

C++ 访问元素时具有奇怪行为的无序_映射,c++,unordered-map,C++,Unordered 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/

我有一张无序的地图,看起来像这样:

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} };

正如你所看到的,我有一个额外的零,顺序是不一样的。如何修复此问题?

您使用的是
std::unordered_map
。这意味着元素没有特定的顺序存储。您的代码工作“正确”。如果您希望维护订单,那么您需要一个类似数组的容器,该容器由
std::pair
std::vector
组成。例如:

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 << " ";
    }
}

您正在使用一个
std::无序\u映射
。这意味着元素没有特定的顺序存储。您的代码工作“正确”。如果您希望维护订单,那么您需要一个类似数组的容器,该容器由
std::pair
std::vector
组成。例如:

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 << " ";
    }
}

std::vector
是几乎所有东西的良好默认设置如果您需要维护创建顺序并通过字符串快速访问,那么
boost::multiindex
是一种方法,但不幸的是,它对于初学者来说并不太简单。另一种方法是创建
std::unordered_map
,索引指向
std::vector
std::vector
是几乎所有东西的良好默认值。如果您需要维护创建顺序并通过字符串快速访问,那么
boost::multiindex
是一种方法,但不幸的是,对于初学者来说,它并不太简单。另一种方法是创建带有
std::vector
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