草庐IT

Union-Find

全部标签

c++ - 在 C++ 中实现不相交集( union 查找)

我正在尝试实现用于Kruskal算法的不相交集,但我无法准确理解它应该如何完成,特别是如何管理森林。在阅读了Wikipedia对DisjointSets的描述并阅读了IntroductiontoAlgorithms(Cormenetal)中的描述之后,我得出以下结论:classDisjointSet{public:classNode{public:intdata;intrank;Node*parent;Node():data(0),rank(0),parent(this){}//theconstructordoesMakeSet};Node*find(Node*);Node*merge

c++ -/usr/bin/ld : cannot find

我创建了一个.so文件并将其放在/opt/lib位置,然后在此之后将此路径添加到LD_LIBRARY_PATH我尝试使用以下命令编译我的主程序:g++-Wall-I/home/alwin/Development/Calculator/main.cpp-lcalc-ocalculator我收到以下错误:/usr/bin/ld:cannotfind-lcalccollect2:ldreturned1exitstatus有人可以帮我解决这个问题吗?我使用代码块IDE创建了共享库 最佳答案 将-L/opt/lib添加到您的编译器参数中,这会

C++:与方法的 union ?

union拥有一种或多种方法有什么问题吗?或者有什么需要注意的?(我可以看到构造函数/析构函数由于精神split症的原因而存在问题) 最佳答案 来自C++03和C++0x(草案N3092)标准:9.5UnionsAunioncanhavememberfunctions(includingconstructorsanddestructors),butnotvirtual(10.3)functions.Aunionshallnothavebaseclasses.Aunionshallnotbeusedasabaseclass.使用聚合初

c++ - C++ 中的 union 实际上是一个类吗?

一位初级开发人员问我是否可以为带有POD参数的union重载赋值运算符,以便在将union实例分配给该类型的变量时写入union中的相应数据类型。我回答说我不这么认为,但随后玩弄了以下代码。令我惊讶的是,这段代码实际上已编译(在Ubuntu12.04上使用g++版本4.6.3)unionunMember{floatfData;unsignedintuiData;unMember():uiData(0){};unMember(floatdata):fData(data){};unMember(unsignedintdata):uiData(data){};operatorfloat(){

c++ - 静态 vector 内部数据布局 - `union` 与 `std::aligned_storage_t` - 巨大的性能差异

假设您必须实现一个static_vector类,它是一个固定容量容器,完全位于堆栈上并且从不分配,并公开了一个类似于std::vector的接口(interface)。(Boost提供boost::static_vector。)考虑到我们必须为N的最大T实例未初始化存储,在设计内部数据布局时可以做出多种选择:单成员union:unionU{T_x;};std::array_data;单个std::aligned_storage_t:std::aligned_storage_t_data;std::aligned_storage_t数组:usingstorage=std::aligned

c++ - union 成员的析构函数是否被调用

C++11允许在union中使用标准布局类型:MemberofUnionhasUser-DefinedConstructor然后我的问题是:当union超出范围时,我是否保证会调用自定义析构函数?我的理解是切换时必须手动销毁和构造:http://en.cppreference.com/w/cpp/language/union#Explanation但是像这样的例子呢:{unionS{stringstr;vectorvec;~S(){}}s={"Hello,world"s};}当s超出范围时,我是否因为没有调用string的析构函数而泄露了堆上分配的字符串的内存?

c++ - unordered_map : which one is faster find() or count()?

判断unordered_map容器中是否有带有指定键的项目的最快方法是什么? 最佳答案 它们的性能大致相同。您应该使用最能表达您想要做的事情的算法。详细说明一下,一般count()会使用find()来实现。例如,在libcxx,count()实现为return(find(__k)!=end()); 关于c++-unordered_map:whichoneisfasterfind()orcount()?,我们在StackOverflow上找到一个类似的问题: h

c++ - union ——无用的时代错误还是有用的老派把戏?

我最近在本地图书馆的一次图书销售中以仅2美元的价格看到了一本很棒的数据结构书,“DataStructuresUsingC”(c)1991。正如书名所暗示的,本书涵盖了使用C编程语言的数据结构。我知道这本书会过时,但可能包含许多我在其他地方不会遇到的高级C主题。果然在5分钟内我发现了一些我不知道的C代码。我很高兴学到了一些有趣的东西,并迅速买了这本书。对于那些不了解union是什么的人,本书使用了一个很好的比喻来解释:Tofullyunderstandtheconceptofaunion,itisnecessarytoexamineitsimplementation.AStructure

c++ - union 中的大括号或相等初始化器

相关:Howtoinitializeanon-PODmemberinUnion标准说Atmostonenon-staticdatamemberofaunionmayhaveabrace-or-equal-initializer.但是structPoint{Point(){}Point(intx,inty):x_(x),y_(y){}intx_,y_;};unionU{intz;doublew;Pointp=Point(1,2);};#includeintmain(){Uu;std::cout打印4196960:0而不是预期的1:2。我认为这是一个编译器错误。是这样吗?

c++ - 避免 std::map::find() 的 key 构造

假设我有一个std::map.std::string可以与没有std::string的C字符串(constchar*)进行比较临时工。但是,map::find()似乎迫使我build一个临时的std::string,这可能需要分配内存。我该如何避免这种情况?从概念上讲,这很容易,但STL似乎可以防止这种情况发生。#includeintmain(){std::mapm;m.find("Olaf");} 最佳答案 您的担忧是真实的,C++11没有好的解决方法。C++14通过添加std::map::find的模板化重载解决了这个问题。——