2016-11-28 104 views
-3

我有這樣的c++代碼:C++如何計算向量中的唯一元素?

#include <iostream> 
#include <fstream> 
#include <string> 
#include <sstream> 
#include <cstdlib> 
#include <cmath> 
using namespace std; 
struct szemelyadat { 

    string vnev; 
    string knev; 
    int szulev; 
    int szulhonap; 
    int szulnap; 
}; 

int vfmeret(const char* fajlnev) 
{ 
    string temp; 
    int merettemp = 0; 
    ifstream meretBE(fajlnev); 
    while (!meretBE.eof()) { 
     meretBE >> temp; 
     merettemp++; 
    } 
    meretBE.close(); 
    return merettemp; 
} 

void vfbeolv(szemelyadat* vek, int elemszam, const char* fajlnev) 
{ 
    int i, j; 
    string stemp, stempresz; 
    ifstream adatBE(fajlnev); 
    for (i = 0; i < elemszam; i++) { 

     adatBE >> stemp; 
     istringstream sorfolyam(stemp); 
     j = 0; 
     while (getline(sorfolyam, stempresz, ';')) { 

      if (j == 0) 
       vek[i].vnev = stempresz; 

      if (j == 1) 
       vek[i].knev = stempresz; 

      if (j == 2) 
       vek[i].szulev = atoi(stempresz.c_str()); 

      if (j == 3) 
       vek[i].szulhonap = atoi(stempresz.c_str()); 

      if (j == 4) 
       vek[i].szulnap = atoi(stempresz.c_str()); 

      j++; 
     } 
    } 
    adatBE.close(); 
} 

void vfkiir(szemelyadat* vek, int elemszam) 
{ 
    cout << "Vezeteknev " 
     << "Keresztnev " 
     << "Szuletesiev " 
     << "Szuletesihonap " 
     << "Szuletesinap " << endl; 
    for (int i = 0; i < elemszam; i++) 

     cout << vek[i].vnev << " " << vek[i].knev << " " << vek[i].szulev << ". " << vek[i].szulhonap << ". " << vek[i].szulnap << endl; 
} 

int main() 
{ 

    int n = vfmeret("szuletesi_nevlista.txt"); 
    szemelyadat* vektor; 
    vektor = new szemelyadat[n]; 

    vfbeolv(vektor, n, "szuletesi_nevlista.txt"); 

    vfkiir(vektor, n); 

    delete[] vektor; 

    cin.get(); 
    cin.get(); 
    return 0; 
} 

我需要清點的獨特元素的個數這是在 「VEK [I] .szulev」

請幫我一個人,我該怎麼辦這個 ?

+1

在問題中包含代碼。不要鏈接到它。 –

+1

我假設你禁止使用std :: map(因爲你沒有使用std :: vector)。 – drescherjm

+0

您的問題標題有誤導性,因爲您的程序中沒有使用「vector」。 – PaulMcKenzie

回答

2

這裏有一個簡單的方法在向量計算的獨特價值:

using Size = ptrdiff_t; 

template< class Item > 
auto n_unique_items(vector<Item> const& v) 
    -> Size 
{ return set<Item>{ v.begin(), v.end() }.size(); } 
+0

這不是我的代碼 –

+1

如果你覺得很難適應,那麼請提出一個新的問題。無論如何,你***問***如何計算向量中的獨特項目。我忽略了你的示例代碼,因爲它不包含向量。 –

1

既然你堅持用「代碼」,你仍然可以利用std::set做計數。

這一切都歸結爲:

#include <set> 
#include <iostream> 

void count_items(szemelyadat* vek, int elemszam) 
{ 
    std::set<int> counter; 
    for (int i = 0; i < elemszam; i++) 
      counter.insert(vek[i].szulev); 
    std::cout << "The number of unique items is " << counter.size(); 
} 

如果調用count_items一旦你填寫你的「VEKTOR」,那麼這會給你的szulev那麼唯一編號的VEKTOR。

+0

對不起,編輯和回滾,我還沒有到我的第一杯咖啡。對不起。 –