class TwoSum {
private:
unordered_map<int,int> buffer;
public:
void add(int number) {
buffer[number]++;
}
bool find(int value) {
for(auto elem : buffer){
int num1 = elem.second;
int num2 = value == (elem.first << 1) ? num1 - 1 : buffer.find(value - elem.first) != buffer.end();
if(num1 && num2){
return true;
}
}
return false;
}
};
这是一个非常好的明白STL模板函数快慢的题目
这一行中下面三种不同的写法会产生不同的运行效率,
简而言之就是[] < < count < find ,以下有一篇介绍unordered_map性能的文章,值得一看
http://kariddi.blogspot.com/2012/07/c11-unorderedmap-vs-map.html
int num2 = value == (elem.first << 1) ? num1 - 1 : buffer.find(value - elem.first) != buffer.end();
int num2 = value == (elem.first << 1) ? num1 - 1 : buffer.count(value - elem.first) ;
<pre name="code" class="cpp"> int num2 = value == (elem.first << 1) ? num1 - 1 : buffer.[value - elem.first];//TLE