一個簡單的查找功能爲什麼沒有在關聯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