我正在学习C++,现在正在编写一个需要输出整数对列表的程序。
如何处理这个问题?因为学校的Linux计算机上没有可用的Boost库,所以我不认为可以使用boost::tuple。
有什么建议吗?
编辑:
它是标准C++的一部分,属于STL(标准模板库)。它是一组漂亮的数据结构,是通用的(即可用于存储任何C++对象类型)。这个特定结构用于存储一对数字。它基本上是一个带有成员"first"和"second"的对象,这些成员指向您在其中存储的第一个和第二个对象(任何类型!)。
因此,只需声明一个pair<int, int>
数组,或者更好地使用另一个STL类型称为“vector”来创建动态大小的pair<int, int>
列表:vector<pair<int, int>> myList
。
嘿,你知道吗!一个动态大小的对列表已经存在了,它叫做映射!使用它就像这样简单:#include <map>
,然后声明一个map<int, int> myMap
!!!
编辑:
是的,正如指出的那样,映射将一个对象映射到另一个对象,因此您不能具有重复的左侧值。如果可以接受这一点,那么映射就是您要寻找的东西,否则请坚持使用pair的vector...或查看multi-map。
cout
处理(就像int
或double
一样)——您需要单独处理它。 - dirkgentlyvector<pair<int, int> >
(注意末尾的空格!),因为>>
会被解析成“右移”。这个问题将在C++0x中得到修复。 - ephemientstd::map
和std::multimap
都不是“一对列表”。列表保留它们的顺序,而映射集合则不保留。 - Ben Voigt使用 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 ) );
C++11
中,创建一对向量非常容易:std::vector<std::pair<int, int>> pairs = {{1,2}, {3,4}, {5,6}};
- Akavall虽然std::pair是使用最佳方案,但我惊讶地发现没有人提到stl之前的解决方案:
struct Pair {
int first;
int second;
};
令人担忧的是,有些人认为他们需要增强技术来解决如此微不足道的问题。
std::pair
的几个重要/好用的特性,因此甚至不能用于说明目的。实际上,提到这种方法的目的是什么? - Konrad Rudolphpair
与Boost有关系了?我指的是这个:人们认为需要使用Boost解决如此微不足道的问题,这让人担忧。
STL!= Boost? - Super Cat
boost::tuple
将作为std::tr1::tuple
包含在内;正如下面答案中其他人所指出的那样,对于一对值,您可以使用std::pair
。 - James McNellis