起初我是c ++的初学者,我自学它,所以请回答相当简单......
我需要编写一个包含节点的图形,每个节点都有id和边缘列表,每个边缘都有另一个节点id和距离
我正在寻找的是我应该用什么来构建这个图,因为我想使用dijkstra算法来获得最短的路径从一个点到另一个...所以搜索性能应该是我认为最重要的!
我搜索了很多,现在我很困惑
提前谢谢你的帮助
在申请过程中,我被设置为一项家庭作业挑战(顺便说一句,我被拒绝了;否则我不会写这个),其中我将实现以下功能:
// 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) 我应该使用哪个STL容器:
例如:数据集(4,10,15)如果我想找到最接近9的数字,那么它应该返回10.
我想过使用矢量,但矢量插入和移除是昂贵的.
vector<int>
Run Code Online (Sandbox Code Playgroud)
如果我要使用list,我必须在到达数据之前访问O(n)元素.
list<int>
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用set,因为如果它被排序会很好,但我不太确定使用SET的效率
所以我希望有人能给出一个好的解决方案!
所以我有一个向量,我希望元素始终排序.我应该如何将元素插入到该向量中,并在弹出它们时保持元素排序.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 ++程序,现在我正在考虑优化它.
瓶颈似乎是我需要堆叠整数对的函数.从一开始就不可能知道它们的数量,而且我一直在使用std::vector一个自定义结构,其中包含两个ints.是否有更高效的数据容器可以在最后重复添加元素?我应该使用两个ints而不是一对或自定义结构吗?
编辑:在对我的程序进行计时和分析之后,我可以说,对于我的使用,vector它比deque(仅仅3%)快一点.我的外行结论是CPU充分利用了数据的连续性.优化对我来说比以往任何时候都更具魔力!对于那些它可能会有所帮助:我实际上通过从STL C++ 11随机数发生器切换到BOOST来显着改善了我的运行时间.
我有一个c ++应用程序,有几种图像类型(RGB,灰色......),每种类型都有像旋转或缩放等属性.每种图像类型都是通过其他类型的计算生成的.例如,通过旋转GrayImage产生A旋转,而旋转a GrayImage又通过"灰化"产生RGBImage.
我想设计一个缓存类,其中GetX(...)包含缓存各种图像的方法(可能还有计算路径中的所有图像).如果不在缓存中,该类还将知道如何生成每个图像.
该类必须满足一些约束:
由于我们处理的是不同类型和表示的图像(RGB,GrayScale等),因此缓存必须为调用代码返回一个具体类,以便能够在不使用某种类型的情况下使用它.因此,缓存机制必须包含包含具体类型的不同缓存结构.(如果我错了,请修理我)
map<...,RGBImage>
map<...,GrayImage>
Run Code Online (Sandbox Code Playgroud)
例如.
缓存必须灵活地适应图像计算的变化.代码更改是可以接受的,只要它们不是太大.
我当前的版本Key为每种图像类型附加了一个结构.有GrayKey,RGBKey等等.各种键保持像Scale和Rotation这样的属性,并且可以具有特定于图像的属性(例如toGrayConvertingMethod for GrayKey).缓存保存表单的地图:
map <XKey,XImage>
Run Code Online (Sandbox Code Playgroud)
GetX(...)例如,方法接收Key结构作为请求Rotated GrayImage的参数.但是,此实现强制缓存应用大量逻辑来计算图像.它必须检查GrayKey是否请求旋转的图像并采取相应的行动.我想以更优雅的方式"编码"这个图像计算关系,但似乎找不到.
有什么建议?
非常感谢.
我需要一个像地图一样的数据结构,但每个键可能有多个与之相关的值,但我需要将与单个键对应的所有值作为对象数组.那么哪种数据结构最适合这样做.我不需要在数据结构中搜索,我只需要快速访问与特定键对应的所有值.我查看了std :: multimap但它没有返回特定键的所有值.那么我可能使用哪种C++中最好的数据结构呢?
我们如何将数组成员移动一个位置?
例如,如果我们有一个包含一个空元素的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) 在对游戏进行编程时,我曾经将所有游戏对象存储在具有初始化和固定大小的std :: vector中。最近,我感到需要在游戏对象类之间进行一些继承。
因此,假设我有40个类来自我的敌人类。如果我要将这些类的对象/实例存储在矢量中,则只能选择将它们存储为矢量Enemy *,对吗?因此,唯一连续分配的是指针,对吗?因此,当需要取消引用这些缓存时,我仍然会有很多缓存丢失,对吗?
是否有任何“最佳实践”方式,将派生类存储在连续分配的内存中,从而使它们之间的循环花费最少的时间?
我有一个对象的"列表",我想从中随机获取对象并将其推到此列表的前面.只会执行这种操作.因此,我不需要快速访问列表的末尾,只需要访问其他任何地方的前端和平均访问权限.
哪个容器最适合这个?我在考虑std::vector,但我读过这个insert操作效率不高.然后我想出了std::deque因为它可以快速进入前方,但是它erase在特定位置方法的效率呢?
在此先感谢您的帮助.
c++ ×10
containers ×5
vector ×5
stl ×2
allocation ×1
arrays ×1
c++11 ×1
class-design ×1
deque ×1
graph ×1
map ×1
memory ×1
multimap ×1
performance ×1
sorting ×1