gpt4 book ai didi

c++ - 字符串 vector 的高效组合

转载 作者:行者123 更新时间:2023-11-28 05:07:01 25 4
gpt4 key购买 nike

我需要运行一个高效的函数来生成字符串组合。我在 SO 中使用了多个答案来写一些有用的东西。将 vector 组合,然后将结果字符串按字符排序,然后通过将结果 vector 插入无序集合来删除重复项。该函数需要在长 vector (100K) 上运行 1e7 次,我需要帮助运行更高效的代码。这是我现在拥有的:

vector<string> vec_combos(vector<string> v1, vector<string> v2) {
vector<string> res;
unordered_set<string> s;
for(int i=0;i<v1.size();i++) {
for(int j=0;j<v2.size();j++){
res.push_back(v1[i]+v2[j]);
sort(res.back().begin(),res.back().end());
}
}
for( int i = 0; i < res.size(); ++i ) s.insert( res[i] );
res.assign( s.begin(), s.end() );
return res;
}

int main() {
vector<string> v1 = {"ab","bc","ca"}, v2 = {"a","b"},v3;
// combined vector = {"aba","bca","caa","abb","bcb","cab"}
// sort string chars = {"aab","abc","aac","abb","bbc","abc"}
// remove duplicates = {"aab","abc","aac","abb","bbc"}
v3 = vec_combos(v1, v2);
for(int i=0;i<v3.size();i++) {
cout << v3[i] << ",";
}
return(0);
}

最佳答案

通过引用传递,避免临时不需要的容器。你可以使用类似的东西:

std::vector<std::string> vec_combos2(const std::vector<std::string>& v1,
const std::vector<std::string>& v2)
{
std::unordered_set<std::string> words; // Or std::set<std::string>

for (const auto& s1 : v1) {
for (const auto& s2 : v2) {
std::string s = s1 + s2;
std::sort(s.begin(), s.end());
words.insert(std::move(s));
}
}
return { words.begin(), words.end() };
}

Demo

关于c++ - 字符串 vector 的高效组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44458770/

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