相关疑难解决方法(0)

构建图表的最佳标准数据结构是什么?

起初我是c ++的初学者,我自学它,所以请回答相当简单......

我需要编写一个包含节点的图形,每个节点都有id和边缘列表,每个边缘都有另一个节点id和距离

我正在寻找的是我应该用什么来构建这个图,因为我想使用dijkstra算法来获得最短的路径从一个点到另一个...所以搜索性能应该是我认为最重要的!

我搜索了很多,现在我很困惑

提前谢谢你的帮助

c++ performance graph data-structures

9
推荐指数
1
解决办法
2万
查看次数

哪个容器对C ++中的多次插入/删除最有效?

在申请过程中,我被设置为一项家庭作业挑战(顺便说一句,我被拒绝了;否则我不会写这个),其中我将实现以下功能:

// Store a collection of integers
class IntegerCollection {
public:
  // Insert one entry with value x
  void Insert(int x);

  // Erase one entry with value x, if one exists
  void Erase(int x);

  // Erase all entries, x, from <= x < to
  void Erase(int from, int to);

  // Return the count of all entries, x, from <= x < to
  size_t Count(int from, int to) const;
Run Code Online (Sandbox Code Playgroud)

然后对功能进行了一系列测试,其中大多数测试都是微不足道的。最终测试是真正的挑战,因为它执行了500,000次单次插入,500,000次呼叫计数和500,000次单次删除。

的成员变量IntegerCollection未指定,因此我必须选择如何存储整数。自然地,一个STL容器似乎是一个好主意,并且对其进行排序似乎是使事情保持高效的简单方法。

这是我使用a的四个函数的代码vector

// Store a collection of …
Run Code Online (Sandbox Code Playgroud)

c++ containers

8
推荐指数
2
解决办法
270
查看次数

使用哪个STL容器?

我应该使用哪个STL容器:

  1. 定期插入和删除数据.
  2. 随机定期访问数据.

例如:数据集(4,10,15)如果我想找到最接近9的数字,那么它应该返回10.

  1. 我只存储一个整数.
  2. 它需要排序
  3. 可以转到100k数据集

我想过使用矢量,但矢量插入和移除是昂贵的.

   vector<int>
Run Code Online (Sandbox Code Playgroud)

如果我要使用list,我必须在到达数据之前访问O(n)元素.

   list<int>
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用set,因为如果它被排序会很好,但我不太确定使用SET的效率

所以我希望有人能给出一个好的解决方案!

c++ containers stl

7
推荐指数
2
解决办法
2万
查看次数

将元素插入到已排序的向量中并保持元素的排序

所以我有一个向量,我希望元素始终排序.我应该如何将元素插入到该向量中,并在弹出它们时保持元素排序.std::lower_bound然而,我调查了与我想要的相反的东西.

例如,这就是我想要的:当我弹出向量中的所有元素时,它应该是:1 2 3 4 5.这意味着向量必须将它们存储为5 4 3 2 1.如果使用下限,则向量将它们存储为1 2 3 4 5,并将其弹出为5 4 3 2 1.此外,将传入一个比较仿函数,以便该lower_bound函数使用比较仿函数.有没有办法与比较仿函数相反?

c++ sorting vector insertion-sort

6
推荐指数
1
解决办法
2万
查看次数

c ++容器在向末尾添加元素时非常有效

我一直在运行一个用于科学目的的c ++程序,现在我正在考虑优化它.

瓶颈似乎是我需要堆叠整数对的函数.从一开始就不可能知道它们的数量,而且我一直在使用std::vector一个自定义结构,其中包含两个ints.是否有更高效的数据容器可以在最后重复添加元素?我应该使用两个ints而不是一对或自定义结构吗?

编辑:在对我的程序进行计时和分析之后,我可以说,对于我的使用,vector它比deque(仅仅3%)快一点.我的外行结论是CPU充分利用了数据的连续性.优化对我来说比以往任何时候都更具魔力!对于那些它可能会有所帮助:我实际上通过从STL C++ 11随机数发生器切换到BOOST来显着改善了我的运行时间.

c++ containers vector

6
推荐指数
1
解决办法
896
查看次数

C++缓存设计建议

我有一个c ++应用程序,有几种图像类型(RGB,灰色......),每种类型都有像旋转或缩放等属性.每种图像类型都是通过其他类型的计算生成的.例如,通过旋转GrayImage产生A旋转,而旋转a GrayImage又通过"灰化"产生RGBImage.

我想设计一个缓存类,其中GetX(...)包含缓存各种图像的方法(可能还有计算路径中的所有图像).如果不在缓存中,该类还将知道如何生成每个图像.

该类必须满足一些约束:

  1. 由于我们处理的是不同类型和表示的图像(RGB,GrayScale等),因此缓存必须为调用代码返回一个具体类,以便能够在不使用某种类型的情况下使用它.因此,缓存机制必须包含包含具体类型的不同缓存结构.(如果我错了,请修理我)

    map<...,RGBImage> 
    map<...,GrayImage> 
    
    Run Code Online (Sandbox Code Playgroud)

    例如.

  2. 缓存必须灵活地适应图像计算的变化.代码更改是可以接受的,只要它们不是太大.

我当前的版本Key为每种图像类型附加了一个结构.有GrayKey,RGBKey等等.各种键保持像Scale和Rotation这样的属性,并且可以具有特定于图像的属性(例如toGrayConvertingMethod for GrayKey).缓存保存表单的地图:

    map <XKey,XImage>
Run Code Online (Sandbox Code Playgroud)

GetX(...)例如,方法接收Key结构作为请求Rotated GrayImage的参数.但是,此实现强制缓存应用大量逻辑来计算图像.它必须检查GrayKey是否请求旋转的图像并采取相应的行动.我想以更优雅的方式"编码"这个图像计算关系,但似乎找不到.

有什么建议?

非常感谢.

c++ class-design

5
推荐指数
1
解决办法
1213
查看次数

我应该使用哪种数据结构?

我需要一个像地图一样的数据结构,但每个键可能有多个与之相关的值,但我需要将与单个键对应的所有值作为对象数组.那么哪种数据结构最适合这样做.我不需要在数据结构中搜索,我只需要快速访问与特定键对应的所有值.我查看了std :: multimap但它没有返回特定键的所有值.那么我可能使用哪种C++中最好的数据结构呢?

c++ map multimap data-structures c++11

5
推荐指数
1
解决办法
512
查看次数

如何实现子阵移位一位

我们如何将数组成员移动一个位置?

例如,如果我们有一个包含一个元素的n大小的数组,并且我们将所有元素向成员pos的右侧移动一个位置,我们可以将第n-1个成员复制到空元素中,以此类推。

代码:

#include <iostream>

using namespace std;

// we take the position of insertion, then right shift all elements
// then insert the required number

int main() {
    int n = 10;
    int list[n];

    cout << "Enter " << n-1  << " elements:\n";

    for( int i = 0; i < n-1; ++i) {
        cin >> list[i];
    }

    int pos, num;

    cout << "Position ( start: 1 ): ";
    cin >> pos; …
Run Code Online (Sandbox Code Playgroud)

c++ arrays vector

5
推荐指数
1
解决办法
304
查看次数

C ++中不同派生类的有效容器

在对游戏进行编程时,我曾经将所有游戏对象存储在具有初始化和固定大小的std :: vector中。最近,我感到需要在游戏对象类之间进行一些继承。

因此,假设我有40个类来自我的敌人类。如果我要将这些类的对象/实例存储在矢量中,则只能选择将它们存储为矢量Enemy *,对吗?因此,唯一连续分配的是指针,对吗?因此,当需要取消引用这些缓存时,我仍然会有很多缓存丢失,对吗?

是否有任何“最佳实践”方式,将派生类存储在连续分配的内存中,从而使它们之间的循环花费最少的时间?

c++ memory containers allocation vector

5
推荐指数
1
解决办法
377
查看次数

我应该使用哪个STL容器?C++

我有一个对象的"列表",我想从中随机获取对象并将其推到此列表的前面.只会执行这种操作.因此,我不需要快速访问列表的末尾,只需要访问其他任何地方的前端和平均访问权限.

哪个容器最适合这个?我在考虑std::vector,但我读过这个insert操作效率不高.然后我想出了std::deque因为它可以快速进入前方,但是它erase在特定位置方法的效率呢?

在此先感谢您的帮助.

c++ containers stl vector deque

4
推荐指数
1
解决办法
294
查看次数