vector setów

0

Jak sie odwoływac do niego?
std::vector<std::set<int> > set;
set[i][u] wyrzuca mi błąd.

0

Przecież std::set nie ma operatora [].

0

Okej, więc zmiemian to na
std::vector<std::vector<int> > value;
Teraz jak wpisywać do tego vectora? Powiedzmy, ze chce stworzyc value[6][2] o wartościach {1,2}.
value.push_back(6);
value[6].push.back(1); value[6].push.back(2);
również wyrzuca błędy

0

Może uogólnie ten problem. Chcę trzymać dane o takiej strukturze (przykład)
1: 1,5,8
2: 4,7,10
4: 2,3,6,9
i odwoływać się do tego w ten sposób:
costam[1] = {1,5,8}
costam[2] = {2,7,10}
costam[4] = {2,3,6,9}
tablica dwuwymiarowa nie wchodzi w gre. vector vectorów jest dobrym rozwiązaniem? Nie sądze, bo wtedy musiałbym miec vectory brakujących wartosci, dla przykładu wyżej:
0: 0
3: 0

1

Mapa wektorów? map<int,vector<int> >

0

idealnie, dzieki wielkie.

0

Kolejny problem, a nie chce zakładac nowego tematu
mam już tę mape vectorów
map<int,vector<int> > value;
i teraz chce to posortować według długości vectora
bool comp(vector<int> a, vector<int> b)
{
return a.size()>b.size();
}
sort(value.begin(), value.end(), comp);
To nie działa.

0

To dość oczywiste bo przecież mapa to kontener asocjacyjny i on nie przechowuje kolejności tylko pary klucz wartość. Co niby chciałbyś uzyskać po takim sortowaniu? jak by to niby miało zadziałać? o_O

0

Nie działa, tzn mam 106 linijek błędu kompilacji i odsyła mnie do algorithm.
Przechowuje to w ten sposób(schemat):
1: 2,3 (długosc: 2)
2: 6,7,8,9 (dlugosc: 4)
3: 1 (dlugosc: 1)
i chce posortować, zeby otrzymać
3: 1
1: 2,3
2: 6,7,8,9
To w ogole ma sens przy mapie vectorów? Po prostu chcę szybko wyszukiwac te vectory, ktorych dlugosc jest większa od x. Chciałem posortowac ale teraz widze, ze to jest całkowicie bezsensu.

0

I co? Chciałbyś w kolejności iterować po tej mapie? Mapa nie ma zadanej kolejności, przykro mi ;] Ale po co tak kombinujesz? Zrób sobie listę/vector indeksów w takiej kolejności w jakiej chcesz i za ich pomocą iteruj. Tzn w vectorze będziesz miał po prostu {3,1,2}

0

To byłoby najłatwiejsze, ale problem w tym, ze nie wiem, jakie dostane wartosci. jeśli dostane
1: 1, 2
100000: 5, 6
to będe miał w przedziałe (1, 100000) same zera, a nie moge sobie na to pozwolić.
Ale mam pomysł.
vector<pair<int, vector<int> > > para;
wtedy będe przechowywał
para[0] = 1: 1, 2 (int: vector<int>)
para[1] = 100000: 5, 6
i będe mógł posortowac według długości vectora. Mam racje? I nie rozwali mi to pamięci? xd

1

Nie rozumiem twojego problemu, bo przecież w wersji z mapą masz klucze mapy i tyle je miałbyś w wektorze określającym kolejność. Bez żadnych zer. Ja rozumiem że klucze byłyby wartościami w wektorze.
Ale musisz odpowiedzieć nam na pytanie CO ty chcesz z tymi danymi zrobić, bo teraz to robisz jakieś cuda na kiju a nikt z nas nie wie jaki jest cel i trudno zaproponować rozwiązanie.

Mapa pozwala ci bardzo szybko odnosić się do danych na podstawie klucza, ale jeśli ty i tak chcesz mieć zadaną kolejność tych i iterować po nich w kolejności to mapa nie jest rozwiązaniem i faktycznie taki wektor par będzie lepszy.

0

Wektor par odpada, przed chwilą się zorientowałem. Spróbuje wyciągnąc klucze mapy i posortować je według długosci vectora w mapie o tym kluczu. Powinno byc okej.

Dalej nic z tego...
Moze wytłumacze problem od podstaw.
numer : 1|2|3|4|5|6|7|8|9
wejscie: 3|3|4|5|5|9|9|9|3
chce to trzymac w ten sposób, ktory przedstawia, na ktorej pozycji jest liczba n z wejscia:
n: {pozycje liczby n}
3: 1, 2, 9
4: 3
5: 4, 5
9: 6, 7, 8

I posortować to według ilości wystąpień liczby n:
3: 1, 2, 9
9: 6, 7, 8
5: 4, 5
4: 3

Puste pola odpadają, zatem chce poruszać sie po tym tylko:
costam[3]
costam[9]
costam[5]
costam[4]

Bez żadnych moich sugestii i pytań, bo mam błędy w kodzie - jak to zrobić?

1

Niestety C++ nie ma standardowo LinkedHashMap ani niczego w tym stylu więc nadal uważam ze najsensowniejsze rozwiązanie to będzie map<int, vector<int> > do przechowywania danych i list<int> do przechowywania kolejności. Dla wygody pewnie dobry pomysł to zapakowanie tego w osobna klasę z iteratorem który pozwala na dostęp do danych z dobrej kolejności.
Ale to już napisałem wcześniej. W takim razie gdzie jest problem? Bo przecież implementacja tego to raczej bułka z masłem.

map<int, vector<int> > mapa; //ładujesz dane do mapy
//wyciągasz klucze
list<int> keys;
for(map<int,vector<int> >::iterator it = mapa.begin(); it != mapa.end(); ++it) {
  keys.push_back(it->first);
}
//definujesz komparator:
bool compare(int key1, int key2)
 {
   return mapa[key1].size()>mapa[key2].size();
 }
//sortujesz klucze
lista.sort(compare);
//i voila, mozemy iteraować po mapie w naszej magicznej kolejności:
    for(list<ui>::iterator it = keys.begin(); it!=keys.end(); it++)
    {
        for(vector<ui>::iterator vecIt = mapa[*it].begin();vecIt!=mapa[*it].end();vecIt++){
            cout<<*vecIt<<" ";
        }
        cout<<endl;
    }
0

for(list<int>::iterator it = keys.begin(); it!=keys.end();it++)
W tej linijce jest 6 błędów kompilacji.

0

Jak nie zrobisz include <list> to mnie to nie dziwi... Na przyszłość POMYŚL zanim coś napiszesz.

0

http://4programmers.net/Pastebin/2521
tam jeszcze cin>>n, bo edytowałem lekko kod po wkljeniu tutaj.

1

Ty jesteś chłopie niepoważny. Raz ze bez sensu formatujesz kod przez co nie wiesz nawet w którym miejscu masz błąd (bo jest on przy wypisywaniu a nie przy pętli...) a dwa że log błędu jest chyba dość oczywisty i wystarczy pomyśleć zamiast stukać bezsensowne posty na forum.
Ja się oczywiście pomyliłem w moim poście powyżej bo zapomniałem że zawartością naszej mapy są WEKTORY. Nie da się tak wypisać wektora oczywiście...

    for(list<ui>::iterator it = keys.begin(); it!=keys.end(); it++)
    {
        for(vector<ui>::iterator vecIt = value[*it].begin();vecIt!=value[*it].end();vecIt++){
            cout<<*vecIt<<" ";
        }
        cout<<endl;
    }

Jeśli planujesz przybiegać na forum z każdym takim problemem to poważnie zastanów się czy programowanie jest dla ciebie.

Nie. Kod formatuje się tak zeby byl czytelny a twój nie jest skoro nie potrafisz nawet odczytać gdzie pojawił się błąd. A już w ogóle jeśli chcesz się tym kodem gdzieś dzielić. Wtedy ma być czytelny też dla innych. Doceń to że poświęcamy tutaj nasz prywatny czas żeby ci pomóc i nam tego nie utrudniaj...
Powinienem zamknąć ten temat za twoje jakże dobrze opisane problemy

W tej linijce jest 6 błędów kompilacji.

tym razem przy sorcie

Ale mam dziś dobry humor. Rozumiesz że łatwiej byłoby gdybyś napisal JAKIE BŁĘDY?
Lista to nie vector i nie ma random access iteratora więc ma swojego sorta, co można w 10 sekund wyczytać z dokumentacji. Ale trzeba do niej zajrzeć a przecież łatwiej napisać na forum i niech ktoś szuka za nas? ...

keys.sort(cmp);

Weź pod uwagę że kody wstawiane na forum zwykle są pisane z palca i często zawierają takie głupie błędy, które ty z kompilatorem powinieneś rozwiązywać od ręki.

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