で見つからない場合、私はunordered map
を持っている:戻り、他の値のキーマップ
static unordered_map<int, long> my_map;
auto& result = my_map[i];
何もキーi
がない場合、結果は0
だろう。 NULL
や-MAXINT
のように他の値を返すことはできますか?
で見つからない場合、私はunordered map
を持っている:戻り、他の値のキーマップ
static unordered_map<int, long> my_map;
auto& result = my_map[i];
何もキーi
がない場合、結果は0
だろう。 NULL
や-MAXINT
のように他の値を返すことはできますか?
結果0
は、「値が見つかりませんでした」という意味ではありません。 の値はで、[]
の操作で追加されました。結果は0
です。これはlong
のデフォルト値であり、[]
操作のデフォルト設定はlong
です。そして、long
がどのようにデフォルトで構築されるかを変更することはできません。
あなたはちょうどあなたが1
や0
を返すmy_map.count(i)
を使用する必要があり、要素が既に存在するかどうかを確認したい場合は、「このキーが存在する」という意味と、それぞれ「このキーは存在しません」。キーが存在しない場合は、my_map.insert
を使用して、好きな値でキーを追加できます。
あなたのような何か(マップに値を挿入しません。)を行うことがあります。
template <typename Key, typename Value>
Value& get_or(std::unordered_map<Key, Value>& m, const Key& key, Value& default_value)
{
auto it = m.find(key);
if (it == m.end()) {
return default_value;
}
return it->second;
}
をそれとも、存在しない場合はマップに値を追加する場合:
template <typename Key, typename Value, typename T>
Value& get_or(std::unordered_map<Key, Value>& m, const Key& key, T&& default_value)
{
return m.emplace(key, std::forward<T>(default_value)).first->second;
}
をし、それを使用
int default_value = 42;
auto& result = get_or(my_map, i, default_value);
値が存在しない場合はmy_map[i]
を使用すると作成されます。したがって、デフォルトのコンストラクタとは異なるものを作成できます。またはlong
の場合はデフォルト値です。
if (my_map.find(i) == my_map.end()) {
my_map[i] = MAX_INT; //Or whatever you want.
}
またはデフォルトコンストラクタを持つlong
のために独自のラッパークラスを持っている:
struct DefLong {
long myLong;
long& operator() {
return myLong;
}
DefLong() : myLong(MAX_INT){}
}
....
static unordered_map<int, DefLong> my_map;
auto& result = my_map[i];
long otheresult = my_map[i];
使用が存在doesntの場合は何をしたいの値を設定し
:あなたはオプションのカップルを持っています'my_map.find(i)'と比較し、 'my_map.end()'と比較しますか? – Jarod42
「NULL」は「0」と同じです。 –