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++をきちんと身につけよう。