问题标签 [containers]

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.

0 投票
7 回答
10129 浏览

c++ - C++ STL 范围容器

我正在寻找一个从双精度映射到对象指针的容器。但是,每个键只是对应于该对象的一个​​双精度范围。

例如,可能存在 <(0.0 3.0), ptr> 或 <(3.5 10.0), ptr2> 的键/值对

container[1.0] 应该返回 ptr,container[3.0] 也应该返回 ptr,并且 container[-1.0] 应该是未定义的。

默认情况下是否有任何具有类似行为的对象,或者我必须自己实现它?

编辑

这是我编写的实际代码,可能更容易调试/提供建议。

现在,即使定义了比较运算符,我也无法让地图接受双精度作为键。

这是我用来测试它是否可以工作的一些驱动代码:

0 投票
8 回答
119963 浏览

c++ - 如何使用 std::maps 和用户定义的类型作为键?

我想知道为什么我不能将 STL 映射与用户定义的类一起使用。当我编译下面的代码时,我收到以下神秘的错误消息。这是什么意思?另外,为什么它只发生在用户定义的类型上?(原始类型在用作键时是可以的。)

C:\MinGW\bin..\lib\gcc\mingw32\3.4.5........\include\c++\3.4.5\bits\stl_function.h||在成员函数`bool std:: less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = Class1]':|

C:\MinGW\bin..\lib\gcc\mingw32\3.4.5........\include\c++\3.4.5\bits\stl_map.h|338|从`_Tp& std:: 实例化map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = Class1, _Tp = int, _Compare = std::less, _Alloc = std::allocator >]'|

C:\Users\Admin\Documents\dev\sandbox\sandbox\sandbox.cpp|24|从这里实例化|

C:\MinGW\bin..\lib\gcc\mingw32\3.4.5........\include\c++\3.4.5\bits\stl_function.h|227|error: no match for 'operator <' 在 '__x < __y'| ||=== 构建完成:1 个错误,0 个警告 ===|

0 投票
1 回答
2547 浏览

apache-flex - 除非在 Flex 3 中明确设置高度(以像素为单位),否则无法自动滚动 VBox

我有一个以编程方式动态添加和删除子项的 VBox。高度设置为 100%,verticalScrollPolicy=auto。

当用户想要向该 Vbox 添加另一个孩子时,我希望它自动滚动到 VBox 的底部,因为这是添加孩子的地方。

我已经尝试了所有可以在网上找到的解决方案,但无论如何,verticalScrollPosition 和 maxVerticalScrollPosition 都始终等于 0。即使我手动滚动到 VBox 的底部并按下一个提醒这些数字的按钮。(即使在之后'validateNow()' 也是如此)。

我唯一能以编程方式更改这些数字的时间是当 VBox 高度以像素为单位设置时,这是我不想要的,因为孩子们都有不同的高度。

请告诉我,可以在不硬编码像素高度的情况下设置verticalScrollPosition吗?我在这里错过了一些完全明显的东西吗?

0 投票
2 回答
148 浏览

c++ - 考虑到这些条件,我是否可以使用 STL 进行线程化?

我有一个表格的集合:

我只在列表的后面插入,有时我从整个地图中读取(但我从不写入地图,除非在初始化时)。

据我了解,没有一个 STL 容器是线程安全的,但我实际上每个键最多只能有一个线程。假设我对这种安排非常安全,我是否遗漏了什么?

0 投票
2 回答
11401 浏览

wpf - 寻找将自身加载到菜单中的模块的 Prism 示例

有谁知道使用 Prism 的 WPF 代码示例,其中每个模块都将自己注册为另一个模块内菜单中的菜单项?

(我目前有一个尝试使用 EventAggregator 执行此操作的应用程序,因此一个模块侦听来自其他模块的已发布事件,这些模块需要在菜单中将其标题作为菜单项,但我遇到了订单问题加载和线程等​​。我想找到一个使用经典棱镜结构的例子来做到这一点。)

我是这么想的:

Shell.xaml:

合约视图:

客户视图:

但据了解,我已经完成了非 Prism MVVM 应用程序结构,并且菜单总是很好地绑定到 ViewModel 中的 ObservableCollections ,上面似乎打破了这个很好的模式。以上是Prism中的惯用方法吗?

0 投票
6 回答
1425 浏览

c++ - C++ 集合中对象的内存管理

我有一张将整数与(对象的)向量相关联的地图。这些向量代表一组要执行的任务。为了减少使用此地图和矢量时的复制量,我将它们设置为使用指针。

在初始化包含 myMap 的类期间,我通过创建一个填充了新 MyObject 的新向量来填充 myMap。

然而,我关心的是内存管理。现在我把这些不同的对象放在堆的某个地方,当我用完它们时我负责清理它们。我也知道在程序完成之前我永远不会完成它们。但是在 10 周内,当有人决定修改此应用程序的一种巧妙方法是从地图/矢量中删除项目时,该怎么办。这将导致内存泄漏。

我的问题是如何处理这些对象的正确释放,以便即使它们通过 STL 函数被删除,对象也能成功释放?

非常感谢您的帮助,如果我错过了任何重要的信息,请告诉我!谢谢!

0 投票
2 回答
1040 浏览

wpf - 有人可以解释 Prism 的 resolve<> 方法中发生的魔法吗?

我有一个带有以下 Initialize() 方法的CustomersModule.cs :

我从容器中解析的类如下所示:

TestWhatever类只是我创建的一个虚拟类:

然而,即使我从未注册过容器,容器也会愉快地解析 ,并且容器也会以某种方式找到TestWhatever,实例化它并将其注入.CustomersPresenterCustomersPresenter

我很惊讶地意识到这一点,因为我在 Prism 文档中找不到任何地方明确指出容器是如此自动化。

所以这很好,但是容器还做了什么我不知道的事情,即它还能做什么我不知道的事情?例如,我是否可以从其他模块注入类,如果模块恰好被加载,容器将注入它们,如果没有,它会注入 null?

0 投票
2 回答
1198 浏览

wpf - 如何在 Prism 中松散地引用模块,以便它们可以存在或不存在?

这个 stackoverflow 问题中,我了解到Prism/Unity 并不像我想象的那样解耦,例如,如果我有一个将 menuManager 注入其构造函数的类,那么我必须确保这个类确实存在于某个地方(我认为你可以只需拉出包含类的 .dll,容器就会处理它,例如在其位置注入 null):

但我可以解决这个问题:如果没有 MenuModule,应用程序就无法运行(或者,正如建议的那样,我可以拥有一个NullMenuModule,它什么都不做,只是防止应用程序崩溃)。

但是,我正在构建的应用程序将在 MenuModule 中有一个MenuManager 类,并且每个模块都必须使用 MenuManager 注册它想要在菜单中拥有的所有内容。但是,我希望能够换掉 MenuModules例如有一个InfragisticsMenuModule并有一个TelerikMenuModule等。

但是,当我在客户模块中时,为了使用 TelerikMenuModule,我需要引用它。当我想使用 InfragisticsMenuModule 时,我需要参考它。

那么我如何能够在不使用新引用重新编译所有模块的情况下使用 InfragisticsMenuModule “热交换” TelerikMenuModule,例如,我想替换它:

有了这个:

并且只需重新启动应用程序,它就会使用新的 InfragisticsMenuModule.dll 运行,并且不会抱怨 TelerikMenuModule.dll 不再存在

0 投票
2 回答
2959 浏览

c++ - 从 C++ STL 关联容器连接键/值

我有一个对 STL 字符串进行操作的连接函数。我希望能够将它应用于这样的容器:

换句话说,在集合中找到所有匹配的键,并将这些值连接成具有给定分隔符的单个字符串。对于一系列键,/对于容器的全部内容等,lower_bound()同样的事情。upper_bound()begin()end()

我能得到的最接近的是以下内容:

(我意识到继承std::string或任何键/值类型通常被认为是一个坏主意,但我没有重载或覆盖任何函数,也不需要虚拟析构函数。我这样做只是为了我可以直接使用的结果,for_each而不必定义隐式转换运算符。)

对于join_range_keys, 使用first_typep.first代替second_typeand有非常相似的定义p.second。我假设类似的定义适用于加入std::setstd::multiset密钥,但我没有任何需要。

我可以将这些函数应用于具有各种类型字符串的容器。键和值类型的任何组合和map组合似乎都有效:multimapstringwstring

这给我留下了几个问题:

  1. 我错过了一些更简单的方法来完成同样的事情吗?函数签名尤其显得过于复杂。
  2. 有没有办法join_values自动推断模板参数类型,这样我就不需要join_values<MapType>每次都调用它?
  3. 如何重构join_valuesandjoin_keys函数和仿函数以避免重复大部分代码?

我确实找到了一个稍微简单的解决方案std::accumulate,但它似乎需要对范围内的每个元素对整个字符串进行两次完整的复制操作,所以据我所知,它的效率要低得多。

0 投票
2 回答
1225 浏览

c++ - 迭代器和循环引用的 C++ 容器

我想创建两个包含彼此迭代器的容器。我希望在不引入任何中间/间接类型的情况下做到这一点。这可能还是迭代器类型取决于知道容器数据类型的大小?

这是我想要编译的一些示例代码:

没关系,它现在编译。我在那里有一个队列,而不是我想要的双端队列:)