2013-04-23 39 views
0

在C++中我有字符串向量的比較排序和刪除

vector < vector <string> > Kblist; 

Kblist,有很多條款,並clauses=kblist.size();和側Kblist每一個條款編號是一個字符串類型的載體,對句子每個單詞分成。

什麼是找到了,像"I love you"和其他在"you love i"同一單詞的句子,從Kblist刪除這兩個句子,我的代碼可能是工作運行的最快的途徑,但我認爲這是因爲太慢許多流通。所以我不知道是否有更好的解決方案,比如使用排序,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); 

回答

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; 
} 

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這方面的工作不應該是一個大問題。

0

在您的情況下,最好使用std::multiset< vector <string> >,比較器根據您的需要比較std::vector<string>。這將給你排序的容器重複值彼此相鄰和廉價的插入/擦除。