如何find一个元素是否存在于std :: map中?
我的用例:
map<string, Car> cars; bool exists(const string& name) { // somehow I should find whether my MAP has a car // with the name provided return false; }
你可以请build议最好的和最优雅的方式来做到这一点在C + +? 谢谢。
当然,使用迭代器
map<string,Car>::const_iterator it = cars.find(name); return it!=cars.end();
return cars.find(name) != cars.end();
你也可以使用
bool exists(const string& name) { return cars.count(name) != 0; }
除了来自find()的iterator-Value和与.end()的比较,还有另一种方法:map :: count。
你可以用特定的键调用map :: count(key) 它将返回给定密钥的条目数量。 对于具有唯一键的映射,结果将为0或1.由于multimap也存在以及相同的接口,所以存在的安全性较好,与!= 0进行比较。
对于你的例子,这是
return (cars.count(name)>0);
我所看到的优点是1.较短的代码,2.受益于图书馆可能在内部应用的任何优化,使用其表示细节。
关于什么:
template <typename KeyType, typename Collection> bool exists_in(Collection const& haystack, KeyType const& needle) { return std::find(haystack.begin(), haystack.end(), needle) != haystack.end(); } template <typename K, typename V> bool exists_in(std::map<K,V> const& haystack, K const& needle) { return haystack.find(needle) != haystack.end(); }
这使得exists_in
可以通过std::find
使用任何标准容器,并使用std::map
的特殊版本,因为它提供了更高效的searchselect。 您可以根据需要添加额外的特化(例如,对于std::set
和其他)。
bool exists(const string& name) { return cars.find(name) != cars.end(); }
std::map::find(const key_type& x );
如果该项不存在,则返回map::end
。
bool exists(const std::map<std::string, Car>& cars, const std::string& name) { return cars.end() != cars.find(name); }
#define itertype(v) typeof((v).begin()) itertype(cars) it = cars.find(name); return it != cars.end();
- 如果我的传入date格式是YYYYMMDD,则在.NET中将string转换为date
- 如何在Visual Studio 2005上设置Google C ++testing框架(gtest)
- 以stringforms获取财产的名称
- 关于线程的混淆以及asynchronous方法在C#中是否真正asynchronous
- 在什么情况下,SqlConnection会自动列入一个环境TransactionScope事务?
- 需要将asp.net webapi 2请求和响应正文logging到数据库中
- 锁在里面锁
- 如何将HTML转换为C#中的文本?
- 为所有传递给可变参数或可变参数模板函数的参数指定一个types,使用数组,向量,结构体等?