2013-02-19 71 views
1

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

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

+0

你是什么意思,它不支持多个键值? – Escualo 2013-02-19 17:04:10

+1

你打算如何处理这些值?快速检查一个点是否存在? – ipc 2013-02-19 17:06:31

+0

您需要向我们解释您计划如何使用这些数据 - 换句话说,您是否需要能够查找给定'x'位置的所有项目?或者在给定'y'的所有项目?或者矩形内的所有项目“(x1,y1,x2,y2)'?我们需要了解您的要求/需求以帮助您。 – 2013-02-19 17:16:29

回答

3

使一对xy值,并用其作为重点:

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

注意,因为它的立场,这将如果您遍历对待x值更显著比y值地图按顺序。如果你想让y的值更加显着,你可以先把它们放在一对。

+0

谢谢!我认为这只是使用map :: insert! – Hjorthenify 2013-02-19 17:18:15

+0

@Hoorthenify:对于'insert',你也使用一对,但这是一对'',这是组成两个不同部分的关键,所以插入你会使用srd:pair ,值>'。 – 2013-02-19 17:22:04

2

您应该使用std::pair为重点,以您的地图:

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

可以使用插入地图:

m[std::make_pair(0, 0)] = some_value; 

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

1

虽然你可以按照其他人的建议使用std :: pair,但我会认真考虑做一个包含数据成员的简单类。它提高了可读性,并且如果需要,还可以使用第3,第4,...个成员来扩展它。

如果你从std :: pair开始,然后你想添加第三个元素,你可能会试图移动到std :: tuple,但是这会导致代码不可读。

简单地做一个关键类,给它一个体面的构造函数(每个数据成员一个参数)。