对象向量的优化向量似乎很慢
Optimization Vector of vector of object seems slow
我正在创建一个多人视频游戏,我有一个服务器和一个客户端在运行。我想优化尽可能多的我可以在服务器上的进程。当我们同时从不同的客户端接收到太多的信息时,服务器会延迟。
我想和你核实一下我所做的是否可以优化,我觉得很容易。
代码完成了:
我们有一张地图:
std::vector< std::vector < caseMap > > _map;
简单对象caseMap:
struct caseMap
{
int areaId;
bomb *bombs;
Bonus *bonus;
int underEffect;
int effectOwnerId;
std::list< player* > players;
};
在这个操作之后,我们访问了大量的时间来映射case:(例如当玩家死亡时)
this->_map[pl->getPosY()][pl->getPosX()].players.erase(itp);
这是我的问题和解决方案:-我们可以只有一个向量而不是两个,并有一个小公式来检索我们正在寻找的实际情况。
但是像我现在这样使用它是不是很重呢?我认为通过[]访问是一个大0常量,所以它不应该超重。
我可以在某些地方使用const引用吗?
我应该使用一个不同的对象,比如std::map吗?
我有点困惑,如果你们能刷新我对c++代码的大脑。谢谢:)
对于std::vector
,查找时间总是恒定的。这个常数很小。添加更多的元素到向量是O(1)
平摊时间,正如在评论中指出的那样。但请注意,最坏的情况追加时间是O(n)
。这通常不是一个问题。如果您知道需要更多的空间,可以通过调用std::vector::reserve()
来预先分配空间,使其稍微快一些。但这通常也是一个不必要的优化。
std::map
有O(ln(x))
的查找和插入时间,所以在大多数情况下会更慢。
如果您有性能问题,此查找不是原因。您应该保持这段代码不变。尝试做一些花哨的事情可能会导致代码变慢和维护混乱。
"过早优化是万恶之源"——Donald Knuth
请参阅问题whats-the-best-free-c-profiler-for-windows,了解用于分析代码的几个选项。完成代码。然后对其进行分析,并集中精力优化重要的部分。
另一个好的引用:
"把事情做好。那就快一点。"
这对年轻程序员和一些老程序员来说都是最难学的一课。你认为你在做正确的事情,真的让代码变得很棒,但你大部分时间都在旋转轮子优化那些无关紧要的东西,并创造未来的代码维护问题。
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 优化 c++ 数组和向量
- c++优化地返回结构和向量
- 优化将标准::uint32_t插入到标准::向量<char>中
- 如何在C++中找到两个向量之间的最小(优化)距离
- 将矩阵的行乘以向量(低级优化)
- 具有单位向量约束的非线性优化
- 如何优化C++逐行读取文件到向量中
- 如何优化这个处理大型 c++ 向量的函数
- 返回值优化与大向量的auto_ptr
- 优化向量赋值 c++
- 为指针向量优化对new的调用
- std::向量类,优化为容纳少量项
- c++,类,向量,优化:多个独立向量vs一个类向量
- 优化可变与不可变向量数学
- 优化检查一个比特向量是否是另一个的适当子集
- 如何在c++中优化检查向量中的元素
- 循环两个不同长度的向量时的优化
- c++自定义类型向量优化
- 使用 STL 向量优化算术运算