草庐IT

set_relation

全部标签

c++ - set::insert 的复杂度

我已经阅读到集合中的插入操作只需要log(n)时间。这怎么可能?要插入,首先我们要在排序后的数组中找到新元素必须位于的位置。使用二分查找需要log(n)。然后要插入到那个位置,它后面的所有元素都应该向右移动一个位置。又需要n次。我的怀疑是基于我的理解,即set是作为数组实现的,并且元素按排序顺序存储。如果我的理解有误,请纠正我。 最佳答案 std::set通常实现为红黑二叉搜索树。在这种数据结构上插入的最坏情况是O(log(n))复杂度,因为树保持平衡。 关于c++-set::inser

c++ - set::insert 的复杂度

我已经阅读到集合中的插入操作只需要log(n)时间。这怎么可能?要插入,首先我们要在排序后的数组中找到新元素必须位于的位置。使用二分查找需要log(n)。然后要插入到那个位置,它后面的所有元素都应该向右移动一个位置。又需要n次。我的怀疑是基于我的理解,即set是作为数组实现的,并且元素按排序顺序存储。如果我的理解有误,请纠正我。 最佳答案 std::set通常实现为红黑二叉搜索树。在这种数据结构上插入的最坏情况是O(log(n))复杂度,因为树保持平衡。 关于c++-set::inser

c++ - 没有内存重新分配的 std::set 的替代方案?

在一个应用程序中,我详尽地生成了许多子问题,并使用“std::set”操作来解决它们。为此,我需要在排序列表上“insert”和“find”元素以及“迭代”。问题在于,对于数百万个子问题中的每一个,每次我在集合中插入一个元素时,“std::set”实现都会分配新的内存,这使得整个应用程序非常慢:{//allocateanon-valuenode_Nodeptr_Pnode=this->_Getal().allocate(1);//是否有一些STL结构允许我在“O(log(n))”中进行上述操作而不重新分配任何内存? 最佳答案 使用自

c++ - 没有内存重新分配的 std::set 的替代方案?

在一个应用程序中,我详尽地生成了许多子问题,并使用“std::set”操作来解决它们。为此,我需要在排序列表上“insert”和“find”元素以及“迭代”。问题在于,对于数百万个子问题中的每一个,每次我在集合中插入一个元素时,“std::set”实现都会分配新的内存,这使得整个应用程序非常慢:{//allocateanon-valuenode_Nodeptr_Pnode=this->_Getal().allocate(1);//是否有一些STL结构允许我在“O(log(n))”中进行上述操作而不重新分配任何内存? 最佳答案 使用自

c++ - 如何使用具有 pair<int,int> vector 元素的 unordered_set

我想拥有类似的东西unordered_set>>us;但即使没有配对:#include#includeusingnamespacestd;intmain(){unordered_set>um;}失败了:Infileincludedfrom/usr/include/c++/4.8/bits/hashtable.h:35:0,from/usr/include/c++/4.8/unordered_set:47,fromprog.cpp:2:/usr/include/c++/4.8/bits/hashtable_policy.h:Ininstantiationof‘structstd::__d

c++ - 如何使用具有 pair<int,int> vector 元素的 unordered_set

我想拥有类似的东西unordered_set>>us;但即使没有配对:#include#includeusingnamespacestd;intmain(){unordered_set>um;}失败了:Infileincludedfrom/usr/include/c++/4.8/bits/hashtable.h:35:0,from/usr/include/c++/4.8/unordered_set:47,fromprog.cpp:2:/usr/include/c++/4.8/bits/hashtable_policy.h:Ininstantiationof‘structstd::__d

c++ - Doxygen 报告 "potential recursive class relation"

我有一个C++模板类base::Foo,我在另一个文件中有一个类base::bar::Foo:publicbase::Foo.Doxygen似乎不喜欢这样,因为它会引发错误:1:DetectedpotentialrecursiveclassrelationbetweenclasssnLib::mocTwod::DsaCellandbaseclassDsaCell!有没有办法防止这种情况发生?Doxygen的文档没有讨论这个错误或任何关于“潜在递归类关系”的内容。“基”类:/*!\filesnlib/DsaCell.hpp*/#ifndefsnlib_DsaCell_hpp#define

c++ - Doxygen 报告 "potential recursive class relation"

我有一个C++模板类base::Foo,我在另一个文件中有一个类base::bar::Foo:publicbase::Foo.Doxygen似乎不喜欢这样,因为它会引发错误:1:DetectedpotentialrecursiveclassrelationbetweenclasssnLib::mocTwod::DsaCellandbaseclassDsaCell!有没有办法防止这种情况发生?Doxygen的文档没有讨论这个错误或任何关于“潜在递归类关系”的内容。“基”类:/*!\filesnlib/DsaCell.hpp*/#ifndefsnlib_DsaCell_hpp#define

c++ - 使用 bitset 和共享静态数组将 std::set 专门用于 (u)int8 和 chars 是否合法

这主要是语言律师类的问题,我怀疑大多数实现会打扰,尤其是因为它可能会增加每个用户的编译时间。话虽如此:如果std::set的某些实现是使用每个实例的bitset和共享的256个值的静态数组实现的(因为键是const是安全的),那么根据(如果版本很重要,那么假设C++20)标准? 最佳答案 只要您遵守[set]部分中的标准规范,我认为没有任何限制会禁止您进行专门的实现。.对于set或set您需要32个八位字节来存储代表潜在成员的256位,具有非常快速的集合操作的优势。对于set你会消耗太多的内存,如果你有非常填充的集合,这只有在恕我直

c++ - 使用 bitset 和共享静态数组将 std::set 专门用于 (u)int8 和 chars 是否合法

这主要是语言律师类的问题,我怀疑大多数实现会打扰,尤其是因为它可能会增加每个用户的编译时间。话虽如此:如果std::set的某些实现是使用每个实例的bitset和共享的256个值的静态数组实现的(因为键是const是安全的),那么根据(如果版本很重要,那么假设C++20)标准? 最佳答案 只要您遵守[set]部分中的标准规范,我认为没有任何限制会禁止您进行专门的实现。.对于set或set您需要32个八位字节来存储代表潜在成员的256位,具有非常快速的集合操作的优势。对于set你会消耗太多的内存,如果你有非常填充的集合,这只有在恕我直