Mam zestaw std :: set z klasą Compare, która wymaga dodatkowego parametru do porównania kluczy. Ten parametr zmienny jest określany w czasie wykonywania i pakuję go wewnątrz kluczy zestawu, aby był dostępny dla porównania.przekazywanie większej ilości danych do std: set Klasa porównania
Jednak parametr logicznie należy do zestawu, a nie do kluczy, więc to rozwiązanie wygląda na niezręczne i duplikuje tę samą wartość dla wszystkich kluczy.
Czy istnieje elegancki sposób przekazywania dodatkowego parametru do klasy Porównaj? (Najpierw myślałem o set :: value_comp, ale zwraca on porównywać obiekt według wartości, a ja potrzebuję referencji).
Dzięki.
Ta odpowiedź jest poprawna, ale ciężko mi było na nią patrzeć. Aby wyjaśnić: musisz utworzyć obiekt porównania z dodatkowymi parametrami wewnątrz, a następnie przekazać ten obiekt do konstruktora std :: set. Nie próbuj modyfikować parametrów po skonstruowaniu zestawu. –
@ Mark Ransom - nie ma srebrnej kuli, jeśli zmieni się zasada sortowania, cały zestaw musi zostać odbudowany. Jeśli parametry nie wpływają na porządek sortowania, możesz przekazać go do Cechy przez odniesienie lub wskaźnik. – Dewfy
Nie ma sposobu na odbudowanie zestawu, poza skopiowaniem go na nowy, więc podtrzymuję moje oświadczenie. Obiekt porównawczy musi zawsze zwracać tę samą wartość, gdy otrzymuje ten sam zestaw danych wejściowych, w przeciwnym razie zestaw może wadliwie działać. –