C++ Priority Queueについて
なぜか突然プライオリティキューの実装方法を知りたくなってしまい、C++のSTLを少しだけ勉強しました。
C++は入門書を何冊か読んだ程度なんで、ド素人ですが、頑張ってSTL書いてみました。
#include <iostream> #include <queue> #include <map> class MyData { private: int age_; std::string name_; public: MyData(std::string name, int age){ age_ = age; name_ = name; } ~MyData(){ } int age() { return age_; } std::string name() { return name_; } }; struct CompareMyDataGreater { bool operator() ( MyData &a, MyData &b) { return a.age() < b.age(); } }; int main() { std::priority_queue<MyData, std::vector<MyData>, CompareMyDataGreater> queue; std::map<std::string, int> itemMap; itemMap.insert(std::pair<std::string, int>("takeshi", 34)); itemMap.insert(std::pair<std::string, int>("aki", 35)); itemMap.insert(std::pair<std::string, int>("manami", 7)); itemMap.insert(std::pair<std::string, int>("koharu", 2)); std::map<std::string, int>::iterator it; for(it = itemMap.begin(); it != itemMap.end(); ++it) { MyData people(it->first, it->second); queue.push(people); } MyData top = queue.top(); std::cout << top.name() << std::endl; }
おお、良くわからないけど、ちゃんと動いたヨ!
実行すると、queueに突っ込んだ順とは関係なくちゃんと一番年齢の高い「aki」が表示される。うむ、ステキだ。
Templateって変態っぽくて嫌いだったけど、STLをちゃんと使えると便利っぽい。
これをきっかけにC++をきちんと身につけよう。