字符串向量的排序比较和删除
String vector's sort compare and delete
在c++中我有
vector < vector <string> > Kblist;
在Kblist
中有许多子句,clauses=kblist.size();
的个数和Kblist
侧的每个子句都是一个字符串型向量,句子中的每个单词都在Kblist[i]
中被拆分。
在"I love you"
和"you love i"
中找到相同单词的句子并从Kblist
中删除这两个句子的最快方法是什么?我的代码可能是工作运行,但我认为它太慢了,因为太多循环。所以我想知道是否有更好的解决方案,像使用sort, clause1==clause2
或其他方法一样快速。
for (int a=0; a<KBlist.size(); a++){
for (int b=a+1; b<KBlist.size(); b++){
int checksize=0;
if (KBlist[a].size()==KBlist[b].size()) {
for (int c=0; c<KBlist[a].size(); c++){
for (int d=0; d<KBlist[b].size(); d++){
if (KBlist[a][b]==KBlist[c][d]&&KBlist[a][b+1]==KBlist[c][d]) {
checksize=checksize+1;
break;
}
}
}
if (checksize==c.size()) {
inset=1;
break;
}
}
}
}
}while (duplicate==0);
您可以遍历每个std::vector
并使用标准库的算法。有std::find
// find example
#include <iostream> // std::cout
#include <algorithm> // std::find
#include <vector> // std::vector
int main () {
int myints[] = { 10, 20, 30 ,40 };
int * p;
// pointer to array element:
p = std::find (myints,myints+4,30);
++p;
std::cout << "The element following 30 is " << *p << 'n';
std::vector<int> myvector (myints,myints+4);
std::vector<int>::iterator it;
// iterator to vector element:
it = find (myvector.begin(), myvector.end(), 30);
++it;
std::cout << "The element following 30 is " << *it << 'n';
return 0;
}
there is std::find_if
// find_if example
#include <iostream> // std::cout
#include <algorithm> // std::find_if
#include <vector> // std::vector
bool IsOdd (int i) {
return ((i%2)==1);
}
int main () {
std::vector<int> myvector;
myvector.push_back(10);
myvector.push_back(25);
myvector.push_back(40);
myvector.push_back(55);
std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), IsOdd);
std::cout << "The first odd value is " << *it << 'n';
return 0;
}
由于您正在使用std::string
,这应该不是一个大问题。
在您的场景中,最好使用std::multiset< vector <string> >
和比较器,以您需要的方式比较std::vector<string>
。这将为您提供一个排序的容器,其中包含相邻的重复值和便宜的插入/删除
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 关于比较两个无序数组并删除 a[] 中可以在 b[] 中找到的元素的问题
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 如何通过比较彼此的成员从QStringList中删除元素
- C++ priority_queue与自定义比较器并删除任何项目
- 比较两个数组并删除重复项
- 在同时添加和删除匹配项的同时比较数组中的项
- 添加两个节点并在比较时删除一个节点
- c++比较两个文件并删除重复的公共编号
- 逻辑帮助:比较值并取最小距离,同时将其从"available to compare"列表中删除
- 删除在两个字符串的比较中不常见的字符
- 比较数组中的值并删除较大的值
- 比较两个具有<customObject>公共变量的向量以删除C++
- 字符串向量的排序比较和删除
- Std::唯一,谓词比较Std::字符串不删除重复
- 要比较两个字符串并从字符串1中删除相同的字符,请使用C++打印字符串2
- C++二叉搜索树比较节点的数据并删除重复项