web-dev-qa-db-ja.com

C ++でペアの数値を保存するにはどうすればよいですか?

私はC++を学ぼうとしていますが、今は整数のペアのリストを出力する必要があるプログラムを書いています。

これを処理する最良の方法は何ですか?学校のLinuxコンピューターで使用できるboostライブラリがないので、boost :: Tupleを使用できないと思います。

助言がありますか?

25
Mithrax

std::pair<object, object> をご覧ください

編集:

これは標準C++であり、STL(Standard Template Library)として知られているものの一部です。これは、汎用的なニースデータ構造のコレクションです(つまり、任意のC++オブジェクトタイプを格納するために使用できます)。この特定の構造は、「タプル」または数値のペアを一緒に格納するために使用されます。これは基本的に、「第1」と「第2」のメンバーを持つオブジェクトであり、それらに格納する(任意のタイプの)最初と2番目のオブジェクトを参照します。

したがって、pair<int, int>の配列を宣言するか、さらに良い方法として、「ベクター」と呼ばれる別のSTLタイプを使用して、pair<int, int>vector<pair<int, int> > myListの動的サイズのリストを作成します。

ねえ、あなたは何を知っていますか!ペアの動的サイズのリストは既に存在し、それはマップと呼ばれます!それを使用するのは#include <map>と同じくらい簡単で、map<int, int> myMap !!!を宣言します。

編集:

はい、指摘したように、マップは1つのオブジェクトを別のオブジェクトに「マップ」するため、左側の値を繰り返すことはできません。それが問題なければ、マップはあなたが探しているものです。それ以外の場合は、ペアのベクトルに固執するか、マルチマップを見てください。

std::mapstd::multimap

31

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 ) );
19
anon

Std :: pairが使用するのに最適なアプローチですが、pre-stlソリューションについて誰も言及していないことに驚いています。

struct Pair {
    int first;
    int second;
};

このような些細な問題にはブーストが必要だと人々が考えるのは心配です。

9
shura