マップの型が関数に渡す関数から推測されるような場合は、このようにすることができます。
#include <map>
template<class Key, class Value, class F>
std::map<Key, Value, F> make_map(const F& f) {
return std::map<Key, Value, F>{f};
}
int main() {
auto my_map = make_map<int, int>([](const int&a, const int& b) { return a < b; });
my_map[10] = 20;
}
私はこれを行う理由のトンを見ませんが、私はそれが役に立たないとは言いません。一般的には、マップを簡単に渡すことができるように、既知のコンパレータが必要です。もし上記の設定は、次の
tempalte<class F>
void do_somthing(const std::map<int, int, F>& m) {
}
のようなテンプレート関数のすべての時間を使用して減少しているとこれは必ずしも悪いことではありませんが、私の本能はONLY汎用関数によって対処することができますタイプを持つことは悪いことを教えて。私はそれがラムダ関数のためにうまくいくと思うが、それはそれについてだ。ここでのソリューションは、今、あなたはあなたが望む任意の述語を使用することができますし、で動作するように、具体的な種類があり、
は、このことができます願っていmy_mapのstd ::機能
#include <map>
#include <functional>
template<class Key, class Value>
using my_map_t = std::map<Key, Value, std::function<bool(const Key&, const Key&)>>;
int main() {
my_map_t<int, int> my_map{[](const int&a, const int& b) { return a < b; }};
my_map[10] = 20;
}
を使用することです!
あなたのマップタイプを定義して、あなたが望む比較任意のラムダを割り当てることができ、コンパレータのタイプに適切な型シグネチャを提供するために、
std::function
を使用し
'cmp'は関数ポインタではありません。 –
Do _what_? 'int'はすでに互いに比較しています。あなたは何をしようとしているのですか?そしてなぜあなたは機能を使いたくないのですか? –
ええ、関数ポインタは正確な用語ではありませんでした。質問をより明確にするために編集しました。 – MBZ