gpt4 book ai didi

c++ - 删除 vector 行时如何更快?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:43 26 4
gpt4 key购买 nike

对于我想做的事情来说,这花费的时间太长了。有什么办法可以让它更快吗?

编辑 抱歉,我一直遇到邮政编码质量问题,所以我只发布了最低限度的内容。

我正在尝试做的是奥马哈扑克赢率计算器。

A-它拿走我们给他的 4 张牌 (myhand[4]),然后检查所有可能的手牌组合,看看是否有重复的牌。

B-如果有任何重复,它要删除包含那只手的 vector 的行(所以后面我们计算赢率的时候,我们不会去计算一个人不可能有的牌)

int myhand[4] = { 3, 12, 22, 10 };
vector<vector<int> > vec(4, vector<int>(270725));
for (int m = 0; m < vec[0].size(); m++) { // A
for (int k = 0; k < 4; k++) {
for (int j = 0; j < 4; j++)
if (myhand[k] == vec[j][m]) {
for (int i = 0; i < 4; i++) {
vec[i].erase(vec[i].begin() + m); // B
}
k = 0;
j = 0;
break;
}
}
}

有没有办法提高这段代码的效率?

谢谢,凯文

最佳答案

在像 std::vector 这样的非关联容器上搜索太昂贵了。

std::set 如果只是要找到 Hands 会很好,但是所讨论的键是问题域方面的复合键(纸牌的 4 元组)并且 std::set 没有特殊的方法来处理类似的事情

“查找包含特定组件的所有键。”

std::map 也只能解决问题的一部分。

可以考虑 boost::bimap,但我建议采用不同的方法:


问题的数据可以通过二分图建模(卡片在左,手在右,l<->r 边表示从“卡片顶点”看“​​在手”,如果从“手顶点”看“​​包含卡片” ".

因此我更喜欢使用(基于 STL 的)boost::graph 而不是自编码的基于 STL 的解决方案。


另一种实用的方法是依赖内存数据库,它可以使用 SQLite 轻松创建;请参加 http://www.sqlite.org/inmemorydb.html

关于c++ - 删除 vector 行时如何更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16593860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com