我有一个地图,我想在每个数据types对象成员函数上执行调用。 我还知道如何在任何序列上做到这一点,但有可能在关联容器上做到这一点? 我能find的最接近的答案是: Boost.Bind访问std :: for_each中的std :: map元素 。 但是我不能在我的项目中使用boost,所以,有没有一个STL的替代品,我错过了提高::绑定? 如果不可能的话,我想创build一个指向数据对象的临时序列,然后在它上面调用for_each,如下所示: class MyClass { public: void Method() const; } std::map<int, MyClass> Map; //… std::vector<MyClass*> Vector; std::transform(Map.begin(), Map.end(), std::back_inserter(Vector), std::mem_fun_ref(&std::map<int, MyClass>::value_type::second)); std::for_each(Vector.begin(), Vector.end(), std::mem_fun(&MyClass::Method)); 它看起来太混乱,我不太喜欢它。 有什么build议么?
这里是testing的代码。 元组testing: using namespace std; int main(){ vector<tuple<int,int>> v; for (int var = 0; var < 100000000; ++var) { v.push_back(make_tuple(var, var)); } } 配对testing: #include <vector> using namespace std; int main(){ vector<pair<int,int>> v; for (int var = 0; var < 100000000; ++var) { v.push_back(make_pair(var, var)); } } 我通过Linux时间命令做了时间测量。 结果是: | | -O0 | -O2 | […]
什么是std::pair ,为什么我会使用它, boost::compressed_pair带来了什么好处?
在只有两个成员的std::pair和std::tuple之间有区别吗? (除了显而易见的std::pair需要两个,只有两个成员和tuple可能会less…)
C ++ 11有函数std::minmax_element ,它返回一对值。 然而,这样处理和阅读是相当混乱的,并且产生了一个额外的,后来无用的variables来污染范围。 auto lhsMinmax = std::minmax_element(lhs.begin(), lhs.end()); int &lhsMin = *(lhsMinMax.first); int &lhsMax = *(lhsMinmax.second); 有一个更好的方法吗? 就像是: int lhsMin; int lhsMax; std::make_pair<int&, int&>(lhsMin, lhsMax).swap( std::minmax_element(lhs.begin(), lhs.end()));
我已经确定了插入std::map四种不同的方法: std::map<int, int> function; function[0] = 42; function.insert(std::map<int, int>::value_type(0, 42)); function.insert(std::pair<int, int>(0, 42)); function.insert(std::make_pair(0, 42)); 哪一种是首选/惯用的方式? (还有没有想过的另一种方式?)
std::make_pair的目的是什么? 为什么不只是做std::pair<int, char>(0, 'a') ? 这两种方法有什么区别?
我感兴趣什么是C + + std :: pair的C#模拟? 我find了System.Web.UI.Pair类,但想要基于模板的东西。 谢谢!