2

mapこの例を見てみましょう。

map<const char*, int, compare> a次のように、マップ オブジェクト: を設定しcompareます。

struct compare : public std::binary_function<const char*, const char*, bool>
{
    bool operator() (const char* a, const char* b) {
        return strcmp(a, b) < 0;
    }
};

私はここで何をしましたか?この演算子をどのようにオーバーロードしましたか? 単項演算子じゃない?

それは機能していますが、ここに書いたことを本当に知っているかどうかはわかりません。

これは完全なコードです:

#include <set>
#include <map>
#include <string>
#include <iostream>
using namespace std;

struct compare : public std::binary_function<const char*, const char*, bool>
{
    bool operator() (const char* a, const char* b) {
        return strcmp(a, b) < 0;
    }
};

int main() {
    map<const char*, int, compare> a;

    a["Mike"] = 5;
    a["Tre"] = 3;
    a["Billie"] = 20;

    for(map<const char*, int, compare>::iterator it = a.begin(); it != a.end(); ++it) {
        cout << (*it).first << endl;
    }

    cin.get();
}
4

2 に答える 2

2

あなたのcompare定義では、次のことが許可されています。

compare cmp;
bool result = cmp("foo", "bar");  // Two arguments, therefore not unary!

したがってstd::map、要素のペアの相対的な順序を決定するために使用できます。これは、舞台裏で二分探索木を構築するために必要です。

于 2013-07-28T14:10:09.993 に答える