我有std :: pair的std :: set,第二对是一个字符串。我想检查一组中是否存在一对。std :: set <std :: pair <size_t,std :: string>> :: find(),没有字符串拷贝构造
std::set< std::pair<size_t, std::string> > set_; bool exists(size_t x, const std::string& s) { std::set< std::pair<size_t, std::string> >::iterator i = set_.find(std::make_pair(x, s)); // copy of s is constructed by make_pair! return i != set_.end(); }
我调用此函数通常(是的,很多时候),所以我想不能使字符串的临时副本进行这样的检查。有没有一种方法可以做到这一点,就像我在这里所做的一样简单而简洁,但是它并不会创建字符串的临时副本?使用STL或Boost容器的任何解决方案都会很好。
你就错了。编写简单,干净并且可行的代码。然后顺便说下去,当你完成时,* profile *你的应用程序,并优化结果说慢;不是猜测。 – GManNickG 2011-01-10 17:03:50
这里有很多的建议,我不应该担心这个函数的性能,除非我有证据表明这个函数导致性能问题,我只想提到读这篇文章的任何人,这是非常好的建议。只是不在这个特殊情况下。 – 2011-01-10 17:40:34
复制一个字符串并不像您想象的那么昂贵。当你证明它是一个瓶颈点时,首先编写干净的代码优化后者。 – 2011-01-10 18:31:47