c ++如何计算向量中的唯一元素?

时间:2016-11-28 17:59:31

标签: 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”中独特元素的数量

请帮帮我一个人,我该怎么做?

2 个答案:

答案 0 :(得分: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(); }

答案 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();
}

如果您在填写“vektor”后致电count_items,则会在vektor中为您提供szulev的唯一编号。