Sortowanie wektora, co robię źle?

0

Cześć, kolejne ćwiczenie, które powinno działać, ale z jakiegoś powodu nie działa.
Mam wektor obiektów. Muszę go posortować. Klasa jest prosta:

class Noisy
{
public:
	Noisy(const int & id): m_id(id)
	{
	}

	Noisy(const Noisy & obj)
	{
		m_id = obj.m_id;
	}

	virtual ~Noisy()
	{
	}

	bool operator<(const Noisy & obj) const
	{
		return m_id < obj.m_id;
	}

	friend ostream & operator <<(ostream & os, const Noisy & obj)
	{
		return os << "Noisy " << obj.m_id;
	}

private:
	int m_id;
};

Całość sortuję tak:

std::vector<Noisy> v;
//tutaj wypełniam wektor
//i sortowanie
sort(v.begin(), v.end());

Z tego, co wiem, to przeciążenie operatora < powinno tutaj wystarczyć. I do operatora faktycznie wchodzi, ale po funkcji sort, wektor jest nadal nie posortowany. Tak samo działa dla deque, ale np. list.sort() zachowuje się już poprawnie. Co tu jest nie tak?

2

Co to znaczy nieposortowany. Pokaż dane (wejściowe, wyjściowe) i kod, który te dane wygenerował.

I wywal konstruktor kopiujący oraz destruktor, skoro są niepotrzebne.

2
Noisy 0 Noisy 1 Noisy 2 Noisy 3 Noisy 4 Noisy 5 Noisy 6 Noisy 7 Noisy 8 Noisy 9 
Noisy 4 Noisy 3 Noisy 7 Noisy 8 Noisy 0 Noisy 5 Noisy 2 Noisy 1 Noisy 6 Noisy 9 
Noisy 0 Noisy 1 Noisy 2 Noisy 3 Noisy 4 Noisy 5 Noisy 6 Noisy 7 Noisy 8 Noisy 9 

Na pewno?
http://ideone.com/PmhlYQ

0
twonek napisał(a):

Co to znaczy nieposortowany. Pokaż dane (wejściowe, wyjściowe) i kod, który te dane wygenerował.
I wywal konstruktor kopiujący oraz destruktor, skoro są niepotrzebne.

Dane generowane są funkcją generate_n. Sposób jest banalny:

Noisy GenerateNoisy()
{
  return Noisy(rand() % 1000);
}

int main()
{
  NoisyVector v;
  v.reserve(10);
  generate_n(back_inserter(v), 10, GenerateNoisy);
}

Następnie wyświetlam cały wektor i mam np:

 
Noisy: 205
Noisy: 172
Noisy: 243
Noisy: 10

Po sortowaniu wynik jest identyczny.

3

Masz do wyboru

  1. Idziesz na forum wróżbitów i tam zadajesz to pytanie
  2. Wklejasz kawałek kodu który można skompilować i się przekonać że mówisz z sensem lub pokazać w którym miejscu kodu robisz bzdurę.
0

OK, napisałem wszystko jeszcze raz i działa. Faktycznie musiałem coś głupiego zrobić.

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