C++ 对std::map C+;使用多个键值+;

C++ 对std::map C+;使用多个键值+;,c++,C++,嗨,我想写一个函数,从文件中读取数据,然后保存在内存中。 该内存需要一个x和y值来识别。它可能不是线性的,在不同的x和y值之间可能有较大的跳跃,并且值的数量未知,这排除了多维数组的使用 我想使用std::map,因为它可以满足我的需要,但它不支持多个键值。我还可以使用什么来存储数据,或者是否有方法合并X和Y值,以便可以在地图容器中使用这些数据?您应该使用std::pair作为地图的键: std::map<std::pair<int, int>, value_type> m

嗨,我想写一个函数,从文件中读取数据,然后保存在内存中。 该内存需要一个x和y值来识别。它可能不是线性的,在不同的x和y值之间可能有较大的跳跃,并且值的数量未知,这排除了多维数组的使用


我想使用std::map,因为它可以满足我的需要,但它不支持多个键值。我还可以使用什么来存储数据,或者是否有方法合并X和Y值,以便可以在地图容器中使用这些数据?

您应该使用
std::pair
作为地图的键:

std::map<std::pair<int, int>, value_type> m;

如果您不关心元素的顺序,并且希望更快地检索和插入,请尝试使用
std::unordered_map

您应该使用
std::pair
作为映射的键:

std::map<std::pair<int, int>, value_type> m;

如果您不关心元素的顺序,并且希望更快地检索和插入,请尝试使用
std::unordered_map

制作一对
x
y
值,并将其用作键:

std::map<std::pair<int, int>, whatever>
std::map

请注意,如果您按顺序遍历地图,这将把
x
值视为比
y
值更重要。如果你想让
y
值更重要,你应该把它们放在第一位。

制作一对
x
y
值,并将其作为键:

std::map<std::pair<int, int>, whatever>
std::map

请注意,如果您按顺序遍历地图,这将把
x
值视为比
y
值更重要。如果您希望<代码> y>代码>值更重要,您希望把它们放在第一对中。

,尽管您可以使用其他人建议的STD::对,我会认真考虑为您的键创建一个包含数据成员的简单类。它提高了可读性,也使它更容易扩展第三,第四。。。如有需要,请加入

如果您从std::pair开始,然后希望添加第三个元素,您可能会尝试移动到std::tuple,但这可能会导致代码无法读取


简单地制作一个键类,并给它一个不错的构造函数(每个数据成员的一个参数)。

尽管你可以使用其他人建议的STD::对,我会认真考虑为你的键做一个包含数据成员的简单类。它提高了可读性,也使它更容易扩展第三,第四。。。如有需要,请加入

如果您从std::pair开始,然后希望添加第三个元素,您可能会尝试移动到std::tuple,但这可能会导致代码无法读取


只需创建一个键类,并为其提供一个像样的构造函数(每个数据成员一个参数)。

你说它不支持多个键值是什么意思?你打算如何处理这些值?快速检查是否存在一个点?您需要向我们解释您计划如何使用此数据-换句话说,您是否需要能够找到给定
x
位置的所有项目?或在给定的
y
上的所有项目?或矩形内的所有项目
(x1、y1、x2、y2)
?为了帮助您,我们需要了解您的要求/需求。您认为它不支持多个关键值是什么意思?您打算如何处理这些值?快速检查是否存在一个点?您需要向我们解释您计划如何使用此数据-换句话说,您是否需要能够找到给定
x
位置的所有项目?或在给定的
y
上的所有项目?或矩形内的所有项目
(x1、y1、x2、y2)
?为了帮助您,我们需要了解您的要求/需求。谢谢!我以为这只是为了使用map::insert@Hjorthenify:对于
insert
,您也会使用一对,但这是一对
,其中这是由两个不同部分组成的密钥,因此对于insert,您会使用
srd:pair
。谢谢!我以为这只是为了使用map::insert@Hjorthenify:对于
insert
,您也会使用一对,但这是一对
,其中这是由两个不同部分组成的密钥,因此对于insert,您会使用
srd:pair