gpt4 book ai didi

c++11 - 一对不可复制不可移动类型和 emplace_back 的向量

转载 作者:行者123 更新时间:2023-12-05 01:19:31 24 4
gpt4 key购买 nike

这基本上是对我之前的问题 Difference between std::unordered_map < K, boost::ptr_deque < T > >'s operator[] (K const &) and emplace 的跟进

我正在尝试实现一个关联向量(称之为 unordered_flat_map)并希望支持 operator [key]

这是代码...

#include <utility>
#include <tuple>
#include <vector>

struct T
{
T() = default;
T(T const &) = delete;
T & operator = (T const &) = delete;
T(T &&) = delete;
T & operator = (T &&) = delete;
};

using S = T;

int main()
{
using value_type = std::pair < uint32_t, S >;
std::vector < value_type > testuvm;
value_type p(std::piecewise_construct, std::forward_as_tuple(2), std::forward_as_tuple());
// testuvm.emplace_back(std::piecewise_construct, std::forward_as_tuple(2), std::forward_as_tuple());
}

注释掉的行无法编译,如果找不到 key ,unordered_map::operator [] 就会这样做。有没有办法使这项工作?如果不是,为什么这不可能?这是由于 vector 的限制吗?

最佳答案

std::vector::emplace_back 的文档中,注意类型的要求是 MoveInsertable .

虽然 emplace_back 不移动新元素,但它在重新分配存储时可能仍需要移动现有 元素。所以没有实用的方法来使用具有固定类型的向量。

请注意 std::deque::emplace_back 没有有这个要求,应该是可用的。

或者,如果您需要使用vector,您可以将类型包装在std::unique_ptr 中使其可移动。

关于c++11 - 一对不可复制不可移动类型和 emplace_back 的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39324298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com