草庐IT

set_relation

全部标签

c++ - std::unordered_set<T>::insert(T&&): 如果存在则移动参数

这个问题是关于C++11标准库中几个函数的规范,这些函数将它们的参数作为右值引用,但并不在所有情况下都使用它们。一个例子是std::unordered_set::insert(T&&).很明显,这个方法将使用T的移动构造函数构造容器中的元素,如果它不存在的话。但是,如果元素已经存在于容器中会怎样?我很确定没有理由更改案例中的对象。但是,我没有在C++11标准中找到任何支持我的主张的内容。这里有一个例子来说明为什么这可能很有趣。以下代码从std::cin读取行并删除第一次出现的重复行。std::unordered_setseen;std::stringline;while(getline

c++ - std::unordered_set<T>::insert(T&&): 如果存在则移动参数

这个问题是关于C++11标准库中几个函数的规范,这些函数将它们的参数作为右值引用,但并不在所有情况下都使用它们。一个例子是std::unordered_set::insert(T&&).很明显,这个方法将使用T的移动构造函数构造容器中的元素,如果它不存在的话。但是,如果元素已经存在于容器中会怎样?我很确定没有理由更改案例中的对象。但是,我没有在C++11标准中找到任何支持我的主张的内容。这里有一个例子来说明为什么这可能很有趣。以下代码从std::cin读取行并删除第一次出现的重复行。std::unordered_setseen;std::stringline;while(getline

c++ - std::hash_set vs std::unordered_set,它们是一回事吗?

我知道hash_set是非标准的,而unordered_set是标准的。但是,我想知道,性能方面,两者之间有什么区别?为什么要分开存在? 最佳答案 C++标准规定的unordered_容器的复杂性要求基本上没有为实现留下太多空间,它必须是某种哈希表。该标准是在充分意识到大多数供应商已经将这些数据结构作为扩展部署的情况下编写的。编译器供应商通常将这些容器称为“HashMap”或“哈希集”,这可能是您所指的(标准中没有文字std::hash_set,但是我认为GCC在单独的命名空间中有一个,对于其他编译器也是如此)。编写新标准时,作者希

c++ - std::hash_set vs std::unordered_set,它们是一回事吗?

我知道hash_set是非标准的,而unordered_set是标准的。但是,我想知道,性能方面,两者之间有什么区别?为什么要分开存在? 最佳答案 C++标准规定的unordered_容器的复杂性要求基本上没有为实现留下太多空间,它必须是某种哈希表。该标准是在充分意识到大多数供应商已经将这些数据结构作为扩展部署的情况下编写的。编译器供应商通常将这些容器称为“HashMap”或“哈希集”,这可能是您所指的(标准中没有文字std::hash_set,但是我认为GCC在单独的命名空间中有一个,对于其他编译器也是如此)。编写新标准时,作者希

c++ - 带有 std::set 的删除删除习语失败并出现与 constness 相关的错误

这个问题在这里已经有了答案:Deletingelementsfromstd::setwhileiterating(8个回答)关闭3年前。有人可以帮我吗?编译这段代码:voidtest(){std::settest;test.insert(42);test.erase(std::remove(test.begin(),test.end(),30),test.end());//编译时出现如下错误:$makeg++-c-Wall-pedantic-errors-Wextra-Wunused-Werrora_star.cpp/usr/lib/gcc/i686-pc-cygwin/4.3.4/i

c++ - 带有 std::set 的删除删除习语失败并出现与 constness 相关的错误

这个问题在这里已经有了答案:Deletingelementsfromstd::setwhileiterating(8个回答)关闭3年前。有人可以帮我吗?编译这段代码:voidtest(){std::settest;test.insert(42);test.erase(std::remove(test.begin(),test.end(),30),test.end());//编译时出现如下错误:$makeg++-c-Wall-pedantic-errors-Wextra-Wunused-Werrora_star.cpp/usr/lib/gcc/i686-pc-cygwin/4.3.4/i

c++ - std::promise set_value 和线程安全

我对std::promise::set_value()上的线程安全要求有点困惑。standardsays:Effects:Atomicallystoresthevaluerinthesharedstateandmakesthatstateready但是,它也说promise::set_value()只能用于设置一次值。如果多次调用,则会抛出std::future_error。所以你只能设置一次Promise的值。事实上,std::promise的几乎每个教程、在线代码示例或实际用例都涉及2个线程之间的通信channel,其中一个线程调用std::future::get(),其他线程调用

c++ - std::promise set_value 和线程安全

我对std::promise::set_value()上的线程安全要求有点困惑。standardsays:Effects:Atomicallystoresthevaluerinthesharedstateandmakesthatstateready但是,它也说promise::set_value()只能用于设置一次值。如果多次调用,则会抛出std::future_error。所以你只能设置一次Promise的值。事实上,std::promise的几乎每个教程、在线代码示例或实际用例都涉及2个线程之间的通信channel,其中一个线程调用std::future::get(),其他线程调用

c++ - Visual Studio 2015 : is a set of const pointers allowed?

我们将很快升级到VS2015,我在重大更改列表中找到了这个:constelementsTheC++standardhasalwaysforbiddencontainersofconstelements(suchasvectororset).VisualC++2013andearlieracceptedsuchcontainers.Inthecurrentversion,suchcontainersfailtocompile.source我想知道是否有人知道这是否也适用于集合。我知道映射仍然可以包含const指针作为键,因为它们无论如何都是const。一个例子:std::set我还能这样

c++ - Visual Studio 2015 : is a set of const pointers allowed?

我们将很快升级到VS2015,我在重大更改列表中找到了这个:constelementsTheC++standardhasalwaysforbiddencontainersofconstelements(suchasvectororset).VisualC++2013andearlieracceptedsuchcontainers.Inthecurrentversion,suchcontainersfailtocompile.source我想知道是否有人知道这是否也适用于集合。我知道映射仍然可以包含const指针作为键,因为它们无论如何都是const。一个例子:std::set我还能这样