25

我正在尝试学习 C++,现在我正在编写一个需要输出整数对列表的程序。

处理这个问题的最佳方法是什么?我在学校的 linux 计算机上没有可用的 boost 库,所以我不相信我可以使用 boost::tuple。

有什么建议么?

4

3 回答 3

31

看一下std::pair<object, object>

编辑:

它是标准 C++ 和所谓的 STL(标准模板库)的一部分。它是一组很好的通用数据结构(即可用于存储任何 C++ 对象类型)。这种特殊的结构用于将“元组”或一对数字存储在一起。它基本上是一个具有成员“first”和“second”的对象,它们引用您存储在其中的第一个和第二个对象(任何类型!)。

因此,只需声明一个数组pair<int, int>,或者更好的是,使用另一种称为“向量”的 STL 类型来创建一个动态大小的pair<int, int>:列表vector<pair<int, int> > myList

嘿,你知道什么!一个动态大小的对列表已经存在,它被称为地图!使用它就像#include <map>声明一个map<int, int> myMap!!!

编辑:

是的,正如所指出的,映射井将一个对象“映射”到另一个对象,因此您不能有重复的左侧值。如果没问题,那么您正在寻找一张地图,否则请坚持使用对的向量....或查看多张地图。

std::map,std::multimap

于 2010-01-29T20:32:59.183 回答
19

使用 std::pair?

#include <utility>
#include <iostream>

int main() {
    std::pair <int, int> p = std::make_pair( 1, 2 );
    std::cout << p.first << " " << p.second << std::endl;
}

您可以制作成对的向量:

typedef std::pair <int, int> IntPair;

...

std::vector <IntPair> pairs;
pairs.push_back( std::make_pair( 1, 2 ) );
pairs.push_back( std::make_pair( 3, 4 ) );
于 2010-01-29T20:35:49.270 回答
9

虽然 std::pair 是最好的使用方法,但我很惊讶没有人提到 pre-stl 解决方案:

struct Pair {
    int first;
    int second;
};

令人担忧的是,人们认为他们需要为这样一个微不足道的问题提供动力。

于 2010-01-31T13:30:24.307 回答