问题标签 [stdset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何在vs2008中的std::set上循环std::set中的元素/向std::for_each添加条件?
从这里: http: //www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/chat/chat_server.cpp
我想在集合的所有成员上调用传递方法,除了参与者传递给这个函数,如何在 vs2008 中做到这一点?
c# - C#数据结构,支持find next,find previous,是排序列表,可以迭代
是否有执行以下操作的 C# 数据结构:
- 在 O(1) 中找到最大值,最小值。
- 删除并插入 O(logN);
- FindNext(int var) : O(logN) 中大于 var 的最小元素;
- FindPrevious(int) : FindNext(int) 的倒数
- 可以在 O(NlogN) 中迭代(不重要)
显然,我们可以使用 std::set 完成所有这些操作。C#中有什么可以做同样的事情吗?
c++ - C ++,从集合中提取的值在从集合中擦除时不会出现在集合中
我已经声明了集合数组
现在我写了两个函数
现在我从集合中一一提取一个值并尝试删除,但它表明该值不存在于结构中
c++ - 是否可以使用与 std::set 中包含的不同类型的元素来执行搜索和删除?
假设我有以下内容:
whereactual_thingy
指向一些重要的数据,我希望容器按 的值actual_thingy
而不是指向的元素的值排序,但是我需要存储一些关于它的其他数据,所以我创建了MetadataThingy
带有比较器的包装类,它只考虑指针的值actual_thingy
(而不是使用 的容器void *
)
现在,给定以下代码:
由于每个MetadataThingy
对象都可以由它存储的指针值唯一标识并按指针值排序,因此只需使用 avoid *
作为键来查找/删除对象是有意义的。但是,就目前的情况而言,MetadataThingy
每次搜索元素时我都必须创建一个虚拟对象,这感觉非常笨拙。我已经考虑过只使用map
带有指针的键和MetadataThingy
值,但由于每个指针都MetadataThingy
必须包含指针,这感觉有点多余。那么,有没有办法使用集合中存储的元素以外的类型的元素来查找或删除集合中的值,假设这两种类型的元素是相互可比的,并且一种类型的元素可以唯一地映射到另一个(void *
和MetadataThingy
是同构的)?(我没有在上面的代码中包含任何内容,但假设存在用于比较void *
和MetadataThingy
任何顺序的运算符重载。)
关于我要解决的问题的一些背景知识,以防万一有人可以推荐更好的方法:我需要按多个标准订购一个集合,所以我有几个MetadataThingy
容器,所有容器都按不同的标准排序。在这种情况下,“元数据”是我需要跟踪所有容器中元素位置的东西,以便我可以快速删除。这听起来像是提升多索引容器的完美工作,但这些元素的顺序不断变化,这意味着 AFAIK 将意味着它不会工作。
c++ - 使用访问器访问静态 std::set,这是明智的还是应该直接访问它?
这个问题源于这个问题的结果: 如何自动维护类实例列表?
参考上一个问题,我创建了我的静态对象列表static std::set< Object* > objects;
但是,为了避免 and 之间的循环引用Engine
,Object
我将其移出Engine
并移入单独的头文件中。然后我意识到,我可以使用一堆静态访问器,而不是直接与列表交互。这样,如果有任何东西对列表进行更改,我总是可以打破这些功能。
这样做还有其他好处吗?或者这是一个不好的方法? 我从不打算实例化ObjectManager
——我是否应该使用我认为所谓的“自由函数”来管理这个std::set
,而不用上课?
我创建了一个测试项目,以使测试变得简单。该类Inheritor
继承自Object
该类。该类的代码ObjectManager
(由 引用Main.cpp
,在本例中Object
,Inheritor
但在我的主项目中将使用非常相似的代码)如下:
对象管理器.h:
对象管理器.cpp:
**
编辑:
** 我已经重写了我的代码以消除对 ObjectManager 的需求。
而不是使用ObjectManager
,我想要一个列表的每个类都包含其源文件中的静态列表,因此Object.cpp
containsstatic std::set<Object *> objectList;
和Inheritor.cpp
contains static std::set<Inheritor *> inheritorList;
。
然后,这两个类中的每一个都包含一个静态Count()
函数,用于获取其各自列表中的项目数,GetListBegin()
以及GetListEnd()
获取集合的开头和结尾。
由于函数在基类和派生类中共享相同的名称,因此Object::Count()
获取其各自列表中的实例数Object
,并Inheritor::Count()
获取Inheritor
其各自列表中的实例数。
我不知道这是否是一种不好的做法。在每个相应的类之外,没有任何东西可以从列表中添加或删除。我唯一的问题是我不确定如何阻止静态函数在任何东西中可用,Inheritor
例如继承自。
c++ - 如何有效地将一系列连续整数插入 std::set?
在 C++ 中,我有一个 std::set 我想插入一系列连续整数。我怎样才能有效地做到这一点,希望在 O(n) 时间内,其中 n 是范围的长度?
我想我会使用 std::insert 的 inputIterator 版本,但不清楚如何构建输入迭代器。
如何创建输入迭代器,这将是范围大小的 O(n) 吗?
c++ - C++ std::set 如何处理元素的动态排序
我有一个用我自己的 comp 函数声明的集合:
比较函数使用存储在其他地方的一些数据来决定哪个 int 更大。如果所述数据改变,则集合元素的顺序也会改变。
set如何处理呢?如果我知道一个 int 的相对位置可能已经改变,我是否必须删除并重新插入它?
详细信息:特别是,my_comp 使用整数作为索引来访问向量并比较向量中包含的值。所述值必然会改变。
c++ - 检测循环对
假设一个std::set< std::pair<char, char> >
,有人可以建议一种算法或方法来检查是否存在循环对吗?
例如
我不想使用任何 extern 库(允许使用 c++ 库),因为该函数bool isCyclic(const std::set< std::pair<char, char> >& set);
只会被使用一次,而且对于#include
像 boost 这样的大型库来说,对于那个函数来说它应该是矫枉过正的......
任何想法如何解决这个问题?
c++ - std::set::iterator 的大小是否有限制?
我有一个 std::set 字符串,我想迭代它们,但迭代器对于不同大小的集合表现不同。下面给出的是我正在处理的代码片段:
代码工作正常 &*iter
被取消引用 & 分配给word
直到大小KeywordsDictionary
约为 15000。但是当大小KeywordsDictionary
增加到超过 15000 时,
- print 语句
cout << *iter;
正在正确打印所有内容KeywordsDictionary
。 - 但是指向迭代器的指针
*iter
没有被取消引用,也没有被分配给word
.word
只是一个空字符串。
编辑:程序的输出是:
所以基本上,我猜循环只执行一次。
c++ - C++ std::set 的排序输出
我想按字母顺序列出我的集合的输出。下面是一个尝试,但它似乎很慢/效率低,我什至还没有完成它。
显然,这只会输出按字母顺序排列在第一个对象之后的对象。
我还考虑将对象从集合中移到另一个容器中,但它似乎仍然效率低下。