LIFE LOG(ここにはあなたのブログ名)

あつあつ備忘録

ソフトやハード、時にはメカの備忘録をまとめていきます

【C++】vectorでpairを使うメモ

f:id:AtsuyaKoike:20190524095847p:plain:w300

最初に

vectorではpairが用いられることが多いようなので、C++vectorとpairを使った動作を備忘録として残します。

vector_pair.cpp

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;
    vec.push_back(2);    
    vec.push_back(7);    
    vec.push_back(0);    
    vec.push_back(3);    
    vec.push_back(5);    
    vec.push_back(1);    
    vec.push_back(4);    
    vec.push_back(6);    
    vec.push_back(9);    
    vec.push_back(8);    

    typedef std::pair<int, int> pair;
    std::vector<pair> pair_vec;
    
    for ( int i = 0; i < vec.size(); ++i )
        pair_vec.push_back( pair( i, vec[i] ) );
        
    for ( auto& i: pair_vec )
        std::cout << i.first << " " << i.second << std::endl;

    return 0;

}

実行結果

$ g++ -o vector_pair vector_pair.cpp -std=c++11
$ ./vector_pair
0 2
1 7
2 0
3 3
4 5
5 1
6 4
7 6
8 9
9 8

解説

先に書かせていただくと、using namespace std;を使えば楽にかけますが、勉強のため。

  • 5行目:int型のベクトルの型を作成。
  • 6から15行目はvecに適当な縦10で横1の行列を作成。
  • 17行目では、pair<int, int>で2つ数字をセットにできる型を作成。
  • 18行目では、横の要素数が2つのpair_vecの行列の型を作成。
  • 23行目は範囲指定のfor文。C++11の機能を使っている。
  • 24行目は出力。pairの場合、ひとつ目がfirst, 2つめがsecondという扱い

まとめ

  • おそらく、pairを使わない場合はvector<vector>など面倒くさい書き方になるのを考えると、pairを使うと簡潔なプログラムになる
  • コンパイルする際にC++11の機能を使うオプションをつけないといけないため、現在の書き方を知る必要はあるかもです。(調べてもでてこないので、コンパイルオプションをつけるのは一般的?

以上です。