【发布时间】:2016-04-28 05:43:56
【问题描述】:
我是move 语义初学者。这是代码吗:
template <typename... Args>
void foo(const Args & ... args){
map<tuple<Args...>, int> cache;
auto result = cache.emplace(move(make_tuple(args ...)),1);
//...
}
效率高于:
template <typename... Args>
void foo(const Args & ... args){
map<tuple<Args...>, int> cache;
tuple<Args...> t(args...);
auto result = cache.insert(make_pair(t,1));
//...
}
特别是如果args 包含一些大对象?
同样的问题,但std::vector(所以不需要make_pair 或make_tuple)
【问题讨论】:
-
BTW tuple
以大对象作为映射键不是 IMO 的最佳选择 -
那你能推荐一个吗? :)
-
我完全不知道你的问题是什么。
-
您显然是对的:这是 memoizator 的一部分,其中
args是输入(为了简单起见,我没有使用作为 memoized 函数的返回类型的值类型) -
好的第一个可能的改进是使用
unordered_map,因为密钥顺序无关
标签: c++ c++11 move-semantics emplace