草庐IT

unordered_container

全部标签

C++:从 container1 中查找不在 container2 中的任何元素

我有一个std::set(s)和一个std::vector(五).保证vector是排序的/唯一的。我想知道v的所有元素是否都在s中(或者只是停在v的第一个元素而不是s中)。我可以将v转换成一个集合并进行==测试,但是有没有不改变容器类型的另一种方法? 最佳答案 关于std::includes的内容算法?这是一个简短的用法示例:vectorv1{1,2,4,8};vectorv2{1,2,3,8};sets{0,1,2,4,8,16};cout输出:10 关于C++:从container

c++ - 如何拥有一个 unordered_map,其中值类型是它所在的类?

这段代码:classFoo{std::unordered_mapx;};给我一​​个错误:/usr/include/c++/4.7/bits/stl_pair.h:94:11:error:'std::pair::second'hasincompletetypefoo.cpp:4:7:error:forwarddeclarationof'classFoo'然而,这段代码编译得很好:classFoo{std::vectorx;};这是库/编译器错误吗? 最佳答案 C++标准对各种智能指针规定模板参数允许为不完整类型。2017及以后版本的

c++ - 在 Visual C++ 和 clang 中使用 C++11 unordered_set

我正在尝试在跨平台C++应用程序中使用std::unordered_set。它在Windows下的VisualC++中的编译和工作非常好,但在MacOSX下的clang上会产生致命的编译错误。我想知道为什么会发生这种情况,以及使它正常工作的正确方法是什么。示例代码:////Clangbuildcmdline://$clang++./set.cpp-Wall-Werror-Wfatal-errors-std=c++11-stdlib=libc++-oset.out//#include#includestructPoint{intx,y;Point(intx=0,inty=0){this-

C++ 自动类型转换 : wrong behaviour for a container class

我正在为非常小的常量vector和矩阵上的线性代数运算实现一些类。目前,当我这样做时:MyMathVectora={1,2,3};MyMathVectorb={1.3,2.3,3.3};std::cout然后First={2,4,6}和Second={2.3,4.3,6.3},因为第二个元素被编译器转换为第一个元素类型。是否有任何“简单”的方法来提供与nativeC++中相同类型的自动转换:int+double=double,double+int=double?非常感谢。编辑:使用答案给出的语法,我让operator+工作了。但我尝试了以下语法,编译失败并出现错误:expectedat

c++ - 使用以数组为键的 unordered_map

我不明白为什么我不能有unordered_map用array作为键类型:#includeusingnamespacestd;intmain(){arraykey={0,1,2};unordered_map,int>test;test[key]=2;return0;}我得到一个很长的错误,最相关的部分是main.cpp:11:9:error:nomatchfor‘operator[]’(operandtypesarestd::unordered_map,int>’and‘std::array’)test[key]=2;^数组是否因为缺少某些要求而不符合成为键的条件?

以 char* 为键的 C++ unordered_map

尝试使用以char*为键的容器unordered_map时,我感到筋疲力尽(在Windows上,我使用的是VS2010)。我知道我必须为char*定义我自己的比较函数,它继承自binary_function。以下是示例程序。#include#include#includeusingnamespacestd;templatestructmy_equal_to:publicbinary_function{booloperator()(const_Tp&__x,const_Tp&__y)const{returnstrcmp(__x,__y)==0;}};typedefunordered_ma

c++ - std::vector 比 std::unordered_set 更快?

在我的自定义物理引擎中,最大的瓶颈是从空间分区(二维网格)获取所有物体并返回仅包含指向物体的唯一指针的集合的方法。templateboolcontains(constT&mContainer,constV&mValue){returnstd::find(std::begin(mContainer),std::end(mContainer),mValue)!=std::end(mContainer);}constvector&GridInfo::getBodiesToCheck(){bodiesToCheck.clear();for(auto&query:queries)for(auto

c++ - 使用 std::tuple 作为 std::unordered_map 的键

使用下面的代码,我在MSVC中遇到了一个非常令人困惑的错误,它似乎暗示key类型(std::tuple)正在转换为std::string。#include#include#include#include#includetypedefstd::tuplekey_t;structkey_hash:publicstd::unary_function{std::size_toperator()(constkey_t&k)const{returnstd::get(k)[0]^std::get(k)^std::get(k);}};structkey_equal:publicstd::binary_

c++ - QMap::contains() VS QMap::find()

我经常看到这样的代码:if(myQMap.contains("mykey")){myValue=myQMap["mykey"];}理论上在QMap中执行两次查找。我的第一react是它应该被下面的替换,它只执行一次查找并且应该快两倍:autoit=myQMap.find("mykey");if(it!=myQMap.end()){myValue=it.value();}我想知道QMap是否会自动为我进行优化?换句话说,我想知道QMap是否保存了用QMap::contains()找到的最后一个元素的位置,并在执行下一次查找之前首先检查它? 最佳答案

c++ - x64 构建 : error MSB8013: This project doesn't contain the Configuration and Platform combination of Debug|Win32

我正在尝试为具有许多解决方案(一些用于CI,一些用于开发人员)和数百个项目的复杂构建运行纯x64构建,并遇到“错误MSB8013:该项目不包含配置和Debug|Win32的平台组合”我已将其简化为一个简单的配置:解决方案A包含项目X和项目Y。项目X有一个项目引用项目Y。解决方案B包含也包含项目X。所有项目或解决方案都不包含Win32平台-它已被删除。当我构建解决方案B(作为x64)时,我收到errorMSB8013:Thisprojectdoesn'tcontaintheConfigurationandPlatformcombinationofDebug|Win32错误信息有时包含额外