C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++入門】データのトリプレット(3つ組)をベクターに格納する方法

このチュートリアルでは、C++においてデータのトリプレット(3つの値の組)をベクター(vector)に格納する方法を解説します。

ベクターの1つの要素に3つの値をまとめて保持したい場合、ユーザー定義構造体を作成し、その構造体型を要素とするベクターを宣言するのが基本的なアプローチです。

実装の考え方

手順は以下の通りです。

  1. 3つのメンバ変数を持つ構造体を定義する
  2. その構造体型を要素とする vector を作成する
  3. push_back() を使ってトリプレットを順次追加する

サンプルコード

#include<bits/stdc++.h>
using namespace std;

// 3つの値をまとめる構造体を定義
struct Test {
    int x, y, z;
};

int main() {
    // ユーザー定義構造体を要素とするベクターを作成
    vector<Test> myvec;

    // 値を挿入
    myvec.push_back({2, 31, 102});
    myvec.push_back({5, 23, 114});
    myvec.push_back({9, 10, 158});

    int s = myvec.size();
    for (int i = 0; i < s; i++) {
        cout << myvec[i].x << ", " << myvec[i].y << ", " << myvec[i].z << endl;
    }
    return 0;
}

実行結果

2, 31, 102
5, 23, 114
9, 10, 158

コードの解説

  • 構造体 Test は、int型のメンバ xyz を持ち、1つのトリプレットを表現します。
  • vector<Test> とすることで、この構造体を要素とする動的配列が生成されます。
  • push_back({2, 31, 102}) のように波括弧(ブレース初期化)を使えば、簡潔に値を追加できます。
  • 各要素へのアクセスは myvec[i].x のように、添字とドット演算子を組み合わせて行います。

補足:std::tuple を使う代替手段

構造体を定義せずに、標準ライブラリの std::tuple を使う方法もあります。vector<tuple<int, int, int>> を作成すれば、同様に3つの値を1つの要素として扱えます。ただし、メンバ名によるアクセス(可読性の高さ)を重視するなら、構造体を使う方が意図が明確になりおすすめです。

  1. 【C++】vectorの内容を出力・表示する方法をわかりやすく解説

    vector(ベクター)は動的配列に似ていますが、サイズを自由に変更できる点が大きな特徴です。vectorは、要素の挿入や削除に応じて自動的にサイズが変化するシーケンスコンテナであり、コンテナとは同じ型のデータを保持するオブジェクトのことを指します。vectorは、将来的な要素の追加に備えて余分なメモリを事前に確保することがあります。また、vectorの要素は連続したメモリ領域に格納され、新しいデータは基本的に末尾に追加されます。以下は、C++でvectorの内容を出力するサンプルコードです。サンプルコード#include<iostream> #include<vector&

  2. C++でPythonの辞書(dict)を読み取る方法をわかりやすく解説

    C++からPythonの辞書を読み取るには?基本的な考え方 C++とPythonを連携させるためのバインディング技術は数多く存在します。C++側でPythonの辞書(dict)オブジェクトを読み取る際に最も重要なのは、両言語間のデータ通信に何を使用するかという点です。選択する手法によって実装の難易度やパフォーマンスが大きく変わります。 方法1:C++/Pythonバインディングライブラリを利用する もっとも一般的なのが、専用のバインディングライブラリを使う方法です。Boost.Pythonやpybind11などの主要なライブラリの多くは、Pythonオブジェクトの解析(パース)処理をライブラ