【发布时间】:2011-06-06 15:18:53
【问题描述】:
我有一个 std::set 的 std::pairs,第二对是一个字符串。我想检查集合中是否存在一对。
std::set<:pair std::string> > set_; bool 存在(size_t x, const std::string& s) { std::set >::iterator i = set_.find(std::make_pair(x, s)); // s 的副本由 make_pair 构造! 返回 i != set_.end(); }我经常调用这个函数(是的,非常频繁),所以我想在不制作字符串的临时副本的情况下执行此检查。有没有办法做到这一点,它和我在这里所拥有的一样简单和简洁,但它不会制作字符串的临时副本?任何带有 STL 或 Boost 容器的解决方案都会很好。
【问题讨论】:
-
你做错了。编写直截了当、干净且有效的代码。然后下线,当你完成后,profile你的应用程序,并优化结果说的慢;不要猜。
-
这里有很多建议,我不应该担心这个函数的性能,直到我有证据表明这个函数会导致性能问题,我只想向阅读这篇文章的人提一下总的来说,这是非常好的建议。只是不是在这种特殊情况下。
-
复制一个字符串并不像你想象的那么昂贵。当你证明它是一个瓶颈时,首先编写干净的代码优化后者。