2014-02-26 61 views
1

我想創建一個模板方法,用於在元素類型中獨立添加和計算映射(stl)中的元素。問題是:我可以如下所示使用迭代器類型的模板嗎?迭代器類型的模板

template < typename Type, typename Iter > 
void TextStat::addElement(Type element, map<Type, int> map, Iter &it) { 

    it = map.find(element); 
    if (it == map.end()) { 
     map.insert(pair<Type, int>(element, 1)); 
    } else { 
     it->second += 1; 
    } 
} 
+2

最好的辦法是編譯和運行並看看會發生什麼 – deeiip

+0

請注意,您正在使用地圖的副本和元素的副本.. – odedsh

+1

做到這一點的方法很簡單'theMap [theKey] ++;' – juanchopanza

回答

0

你可以寫你的方法是這樣的:

template <typename Type> 
void TextStat::addElement(const Type& element, std::map<Type, int>& m) { 
    std::map<Type, int>::iterator it = m.find(element); 

    if (it == m.end()) { 
     m.insert(std::pair<Type, int>(element, 1)); 
    } else { 
     it->second += 1; 
    } 
} 

或者更簡單,作爲int默認值初始化0

template <typename Type> 
void TextStat::addElement(const Type& element, std::map<Type, int>& m) { 
    m[element]++; 
}