javascript magazine

主にjavascriptについて書こうと思っています。

c++ pairの使い方を学んで2つの値を管理する

c++のstd::pairの使い方のメモ

std::pairの中身(utility classから参照)

template <class T1, class T2>
struct pair
{
    typedef T1 first_type;
    typedef T2 second_type;

    T1 first;
    T2 second;

    pair(const pair&) = default;
    pair(pair&&) = default;
    constexpr pair();
    pair(const T1& x, const T2& y);                          // constexpr in C++14
    template <class U, class V> pair(U&& x, V&& y);          // constexpr in C++14
    template <class U, class V> pair(const pair<U, V>& p);   // constexpr in C++14
    template <class U, class V> pair(pair<U, V>&& p);        // constexpr in C++14
    template <class... Args1, class... Args2>
        pair(piecewise_construct_t, tuple<Args1...> first_args,
             tuple<Args2...> second_args);

    template <class U, class V> pair& operator=(const pair<U, V>& p);
    pair& operator=(pair&& p) noexcept(is_nothrow_move_assignable<T1>::value &&
                                       is_nothrow_move_assignable<T2>::value);
    template <class U, class V> pair& operator=(pair<U, V>&& p);

    void swap(pair& p) noexcept(is_nothrow_swappable_v<T1> &&
                                is_nothrow_swappable_v<T2>);
};

pairとはなにか?

文字通りセットにして使いたいような2つの値を保持することのできるオブジェクトのこと。
自分のケースですが、トランプでババ抜きしているときに、持っているカードとその並び順とか
ダイアのエースが手元の左から何番目にあるかなどを保持したいときなど

ヘルパー関数

関数名 説明 使用例
make_pair(_T1&& __t1, _T2&& __t2) pairオブジェクト生成 std::pair<String, int> mypair = make_pair("jiji", 4000);

pairの使用例

    
// 生成
std::pair<string, int> mypair = make_pair("jiji", 4000);
// アクセス方法
mypair.first = "exchange";
mypair.second = 2000;

pairの配列

// 配列
pair<bool,int>trump[52];
// アクセス
trump[0].second

c++でmapを全探索する

c++でmapオブジェクトを全探索する方法です。

 

以下の様なクラスを定義して、そのクラスを元にmapを作ります。

class BleDevice
{
public:
    // function
    BleDevice();
    ~BleDevice();
    // setter getter
    void setName(string name);
    string getName();
private:
    string name;
};

mapを定義します。

map<string,BleDevice*>bleDevices;

このマップを全探索します。

for (auto& device : bleDevices) {

}

forで全探索したmapオブジェクトを取り出す

mapにinsertしたオブジェクトを取り出します
secondをというオブジェクトの中にBleDeviceクラスが入っています。
secondはtemplateです。

for (auto& device : bleDevices) {
  device.second->setName("aaa");
  // ...などなどの操作
}