C++ でペアのベクトルに要素を追加
-
push_back
とmake_pair
を用いて対のベクトルに要素を追加する -
push_back
とペアへのキャストを用いてペアのベクトルに要素を追加する -
ペアのベクトルに要素を追加するには
emplace_back
を使用する
この記事では、C++ でペアのベクトルに要素を追加するいくつかの方法を説明します。
push_back
と make_pair
を用いて対のベクトルに要素を追加する
コンテナ vector
は std::pair
型の要素を保持することができ、これは 2つの異種オブジェクト型を 1つのデータユニットとして保持するためのクラステンプレートです。これは、2つの要素しか保持できない点を除けば、Python などの異なるプログラミング言語でより一般的に知られている tuple
データ型に似ています。
ペアのベクトルは vector<pair<int, string>>
という式で宣言され、構造体と同じように初期化することができます。一旦 std::pair
型の要素を追加で vector
にプッシュする必要があれば、push_back
メソッドを利用することができます。ただし、このメソッドは make_pair
関数を用いて構築された要素を必要とすることに注意してください。
次の例では、 <int, string>
ペアを使用し、ペアのベクトルに要素を追加する構文は push_back(make_pair(55, "fifty-five"))
です。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::make_pair;
using std::pair;
using std::string;
using std::vector;
template <typename T>
void printVectorElements(vector<T> &vec) {
for (auto i = 0; i < vec.size(); ++i) {
cout << "(" << vec.at(i).first << "," << vec.at(i).second << ")"
<< "; ";
}
cout << endl;
}
int main() {
vector<pair<int, string>> vec1 = {
{12, "twelve"}, {32, "thirty-two"}, {43, "forty-three"}};
cout << "vec1: ";
printVectorElements(vec1);
vec1.push_back(make_pair(55, "fifty-five"));
cout << "vec1: ";
printVectorElements(vec1);
cout << endl;
return EXIT_SUCCESS;
}
出力:
vec1: (12,twelve); (32,thirty-two); (43,forty-three);
vec1: (12,twelve); (32,thirty-two); (43,forty-three); (55,fifty-five);
push_back
とペアへのキャストを用いてペアのベクトルに要素を追加する
前の方法の代替として、リテラル値をペアにキャストしてから push_back
メソッドに式を挿入することができます。しかし、この方法は可読性の点ではあまり明確ではありませんし、大規模なコードベースではエラーが発生しやすいでしょう。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::make_pair;
using std::pair;
using std::string;
using std::vector;
template <typename T>
void printVectorElements(vector<T> &vec) {
for (auto i = 0; i < vec.size(); ++i) {
cout << "(" << vec.at(i).first << "," << vec.at(i).second << ")"
<< "; ";
}
cout << endl;
}
int main() {
vector<pair<int, string>> vec1 = {
{12, "twelve"}, {32, "thirty-two"}, {43, "forty-three"}};
cout << "vec1: ";
printVectorElements(vec1);
vec1.push_back(pair(55, "fifty-five"));
cout << "vec1: ";
printVectorElements(vec1);
cout << endl;
return EXIT_SUCCESS;
}
出力:
vec1: (12,twelve); (32,thirty-two); (43,forty-three);
vec1: (12,twelve); (32,thirty-two); (43,forty-three); (55,fifty-five);
ペアのベクトルに要素を追加するには emplace_back
を使用する
emplace_back
メソッドは vector
コンテナの組み込み関数であり、オブジェクトの末尾に新しい要素を作成します。emplace_back
が動作するためには、要素型に args
のコンストラクタを持たせなければならないことに注意してください。今回は std::pair
要素を構築するためにこの関数を利用しているので、以下のコードサンプルのようにリテラル値を指定して呼び出しても問題ありません。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::make_pair;
using std::pair;
using std::string;
using std::vector;
template <typename T>
void printVectorElements(vector<T> &vec) {
for (auto i = 0; i < vec.size(); ++i) {
cout << "(" << vec.at(i).first << "," << vec.at(i).second << ")"
<< "; ";
}
cout << endl;
}
int main() {
vector<pair<int, string>> vec1 = {
{12, "twelve"}, {32, "thirty-two"}, {43, "forty-three"}};
cout << "vec1: ";
printVectorElements(vec1);
vec1.emplace_back(55, "fifty-five");
cout << "vec1: ";
printVectorElements(vec1);
cout << endl;
return EXIT_SUCCESS;
}
出力:
vec1: (12,twelve); (32,thirty-two); (43,forty-three);
vec1: (12,twelve); (32,thirty-two); (43,forty-three); (55,fifty-five);