PDA

Visualizza la versione completa : [c++] trovare valori con presenze multiple nel vector <int>


freetom
24-01-2010, 14:41
Ho un vector di questo tipo:



interi = {1,1,3,44,2,78,45,44,90};


dovrei semplicemente crearne due nuovi popolandone uno con i valori presenti pił volte in interi e l'altro con quelli rimanenti (presenti una sola volta in interi) per ottenere ad esempio due nuovi vector <int>:



interipresenzemultiple= {1,44};
interipresenzesingole= {3,2,78,45,90};


thanks

:ciauz:

freetom
24-01-2010, 16:07
Originariamente inviato da freetom
Ho un vector di questo tipo:



interi = {1,1,3,44,2,78,45,44,90};


dovrei semplicemente crearne due nuovi popolandone uno con i valori presenti pił volte in interi e l'altro con quelli rimanenti (presenti una sola volta in interi) per ottenere ad esempio due nuovi vector <int>:



interipresenzemultiple= {1,44};
interipresenzesingole= {3,2,78,45,90};


thanks

:ciauz:

risolto da solo :D

In pratica ho risolto con un ciclo sui due array (uno di confronto fisso e l'altro dinamico) e con un incremento opportuno di un contatore...

:)

antotan
24-01-2010, 16:11
Credo ti basti usare semplicemente l'algoritmo count:



#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

void fill(vector<int>& vi)
{
vi.push_back(1);
vi.push_back(1);
vi.push_back(1);
vi.push_back(3);
vi.push_back(44);
vi.push_back(2);
vi.push_back(78);
vi.push_back(45);
vi.push_back(44);
vi.push_back(90);
}

int main()
{

vector<int> vi;
vector<int> vm;
vector<int> vs;

fill(vi);

// Riempimento
for(vector<int>::iterator iter = vi.begin(); iter != vi.end(); iter++)
{
if( count(vi.begin(), vi.end(), *iter) > 1 ) {
if (count(vm.begin(), vm.end(), *iter) == 0)
vm.push_back(*iter);
}
else {
vs.push_back(*iter);
}
}

for(vector<int>::iterator iter = vm.begin(); iter != vm.end(); iter++)
cout << *iter << " | ";
cout << endl;

for(vector<int>::iterator iter = vs.begin(); iter != vs.end(); iter++)
cout << *iter << " | ";
cout << endl;
}



Output:

1 | 44
3 | 2 | 78 | 45 | 90

:ciauz:

Loading