Porównanie dwóch tablic z różną ilością wierszy.

0

Witam,

Mam problem z porównaniem dwóch tablic dwuwymiarowych. Posiadam tablicę A z 20 wierszami i 2 kolumnami oraz tablicę B z 4 wierszami i 2 kolumnami. Tablica B jest tak jakby tablicą decyzyjną i chciałbym aby na jej podstawie przeszukać tablicę A i znaleźć id(znajdujące się w kolumnie nr.1) z podobnymi liczbami całkowitymi z kolumny nr.2 w dwóch tablicach, a następnie wypisać same Id do tablicy jednowymiarowej.

Aby lepiej wyjaśnić:

Tablica A

ID Int
1 4
2 1
3 2
4 1
5 3
... ...
20 2

Tablica B

ID Int
2 1
4 1
5 3
10 4

Chciałbym porównać obie tablice posługując się Int, jeżeli Int w 1 wierszu Tablicy B wynosi 1 to algorytm powinien przeszukać tablicę A w poszukiwaniu Int=1 i wpisać Id z tablicy A w którym Int=1 do nowej tablicy jednowymiarowej.

Także podsumowując dla tego przykładu powinna ukazać się tablica jednowymiarowa z pasującymi ID z tablicy A, czyli Tab={2,4,5,1}.

int a = 1;
int tabWyn[ a ];
for( int i = 1; i <= 20; i++ )
{
    if( tabA[ i ][ 2 ] == tabB[ i ][ 2 ] )
    {
        tabWyn[ a ] = tabA[ i ][ 1 ];
    } else cout << "blad" << endl;
   
    ++a; }

Wypociłem coś takiego ale zamierzonego celu nie osiągam.

0

Merging -- jeśli obie posortowane...

2

W C i C++ i w większości języków programowania, tablice ideksuje się od zera nie od 1.
Czyli masz klasyczny bufferoverflow.

Nie wiem co ten kod ma robić ale wygląda na coś co powinno użyć std::unordered_map<int, ID>.

1

Może podaj jaki wynik oczekujesz w przypadku podanych przykładowych danych. Bo w twoim kodzie błąd na błędzie!

0
Kamil Kropiwnicki napisał(a):

Chciałbym uniknąć sortowania ze względu na późniejsze działania.

W przykładach masz posortowane -- myślałem, że to tak jest... Jeśli nie są posortowane, a nie chcesz użyć innej struktury danych, do musisz zrobić pętle w pętli, bo chcesz porównać każdy z każdym... Ale jak @MarekR22 napisał -- map różnych rodzajów jest od tego...

0
#include <iostream>
#include <vector>
#include <map>
#include <set>
using namespace std;

int main()
{
	pair<int,int> A[] {{1,4},{2,1},{3,2},{4,1},{5,3}}, B[] {{2,1},{4,1},{5,3},{10,4}};
	int cnt=0;
	map<int,int> m,s;	
	for(auto b:B) for(auto a:A) if((a.second==b.second)&&(!m[a.first])) m[a.first]=++cnt;
	for(auto v:m) s[v.second]=v.first;
	for(auto v:s) cout<<v.second<<' ';
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1