一个简单的查找功能为什么没有在关联STD容器一个“查找”功能(图,设置等)返回一个布尔值?为什么没有为关联性病容器
说:
std::map <int,int> mMap;
...
if (mMap.contains(75)) ...
我知道查找(),我也可以这样来做
if (mMap.find(75) != mMap.end()) ...
但我觉得它杂波的代码比什么都重要。
为什么没有一个更简单的功能呢,我的意思是容器有很多关于在它们中找到的东西?
一个简单的查找功能为什么没有在关联STD容器一个“查找”功能(图,设置等)返回一个布尔值?为什么没有为关联性病容器
说:
std::map <int,int> mMap;
...
if (mMap.contains(75)) ...
我知道查找(),我也可以这样来做
if (mMap.find(75) != mMap.end()) ...
但我觉得它杂波的代码比什么都重要。
为什么没有一个更简单的功能呢,我的意思是容器有很多关于在它们中找到的东西?
你可以让你自己的(注意,这是“HasKey”,因为“包含”将处理值)
template <class AssocContainer>
bool HasKey(const AssocContainer& haystack,
const typename AssocContainer::key_type& needle)
{
return haystack.find(needle) != haystack.end();
}
map<int, int> m;
m[0] = 1;
bool b = HasKey(m, 0);
是的,这将工作+1,但也会混乱一点。 – Valmond 2012-03-12 13:27:57
一个简单的原因是它没用(并且使你更无效)。
想想看这样,当你说:
mMap.find(75)
您正在搜索75
,但为了什么呢?你想稍后使用它!
那么为什么要写if (mMap.find(75) != mMap.end())
然后再找到75
来使用它呢?
你可以写:
std::map<int, int> mMap;
std::map<int, int>::iterator whatIWant = mMap.find(75);
if (whatIWant != mMap.end())
{
int mapsTo = whatIWant->second;
...
}
这意味着你发出find
一次,你会得到两个contains
的结果,并在地图上的实际节点。
我相信答案是查找功能在这种情况下,2和职责,你可以使用相同的代码,以便做两个不同的东西找到,如果它存在,因此较少的代码错误少像往常一样检查。
像往常一样,没有什么问题downvotes但请不要告诉原因。要知道,没有教育价值没有处罚;-) – Valmond 2012-03-12 13:02:17
['性病::地图:: count'(http://en.cppreference.com/w/cpp/container/map/count)会做你想要什么。 – KillianDS 2012-03-12 13:07:14
足够接近作出回答(如果你发布它,我会接受它)! – Valmond 2012-03-12 13:29:40