本当は怖いHPC

HPC屋の趣味&実益ブログ

STLコンテナのconstメンバー関数

3回くらい調べてしまったのでメモ。
STLのコンテナをメンバー変数にもって、constメンバー関数を実装するときに、検索系の関数はconstがあるものと無いものを使い分けないとダメ。
言葉で書くと意味不明ですけど、要はこういうことです。

#include<map>
using namespace std;

struct Foo {
  map<int,int> m;
  int get(int a) const {
    return m[a]; // エラー
  }
};

これを防ぐためには、当たり前ですがmapで提供されているconstメンバ関数を使います。

#include<map>
using namespace std;

struct Foo {
  map<int,int> m;
  int get(int n) const {
    return m.find(m)->second;
  }
};

map::find()メンバ関数const版も提供されているので、自動的にそちらが使われます。

【広告】