std::map に bool has_key(Key); を拡張する
#ifndef SHAND_EXTENSION_STD_MAP_INCLUDE #define SHAND_EXTENSION_STD_MAP_INCLUDE #include <map> #include <functional> // std::tr1::result_of namespace shand { namespace extension { template <class Key> class has_key_t { Key key_; public: typedef bool result_type; has_key_t(const Key& key) : key_(key) {} template <class UKey, class UValue> bool operator()(const std::map<UKey, UValue>& source) const { return source.find(key_) != source.end(); } }; template <class Key> inline has_key_t<Key> has_key(Key key) { return has_key_t<Key>(key); } template <class Key, class Value, class Func> inline typename std::tr1::result_of<Func(const std::map<Key, Value>&)>::type operator|(const std::map<Key, Value>& source, Func func) { return func(source); } }} // shand::extension #endif // SHAND_EXTENSION_STD_MAP_INCLUDE
サンプル
#include <iostream> #include <map> #include <string> #include <shand/extension/map.hpp> using namespace std; using namespace shand::extension; int main() { map<string, int> dict; dict["Akira"] = 23; dict["Johnny"] = 38; dict["Millia"] = 16; if (dict|has_key("Akira")) { cout << "found" << endl; } return 0; }
std::tr1::result_of を使っているので注意
TR1 ライブラリがないコンパイラでは