Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.6.2] std::map i sf::Vector2i - binary '<': no operator found which takes a left-hand operand of type 'const _Ty' (or there is no acceptable conversion)

Ostatnio zmodyfikowano 2025-07-10 18:50
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
[SFML 2.6.2] std::map i sf::Vector2i - binary '<': no operator found which takes a left-hand operand of type 'const _Ty' (or there is no acceptable conversion)
» 2025-07-10 16:03:43
Cześć. Zadeklarowałem std::map z sf::Vector2i oraz std::wstring i wyrzuca mi następujący błąd. Jak to naprawić ?

binary '<': no operator found which takes a left-hand operand of type 'const _Ty' (or there is no acceptable conversion)


C/C++
std::map < sf::Vector2i, std::wstring > map_terrain_sets;
map_terrain_sets.clear();
map_terrain_sets[ sf::Vector2i( 0, 1 ) ] = L"tiles\\set_0_water_sands";
map_terrain_sets[ sf::Vector2i( 1, 0 ) ] = L"tiles\\set_0_sands_water";
map_terrain_sets[ sf::Vector2i( 2, 1 ) ] = L"tiles\\set_1_sands_grass";
map_terrain_sets[ sf::Vector2i( 1, 2 ) ] = L"tiles\\set_1_grass_sands";
P-182685
pekfos
» 2025-07-10 17:58:11
SFML nie definiuje żadnej kolejności w jakiej punkty się naturalnie sortuje, więc nie możesz ich użyć jako klucza w kontenerze który wymaga porządku elementów. Możesz do dodefiniować samemu, na przykład
C/C++
template < class T >
bool operator <( const sf::Vector2 < T > & lhs, const sf::Vector2 < T > & rhs )
{
   
return lhs.x != rhs.x ? lhs.x < rhs.x: lhs.y < rhs.y;
}
czy cokolwiek dla Ciebie znaczy że punkt jest mniejszy od drugiego. Wymagania są te same co do sortowania, kiedyś to opisywałem tu » Kurs C++» Poziom 5Wprowadzenie do standardowych algorytmów lekcja.
P-182691
tBane
Temat założony przez niniejszego użytkownika
» 2025-07-10 18:05:06
A jak użyć tej funkcji ? Samo wklejenie przed std::map nic nie dało. Błąd nadal się pojawia.

C/C++
template < class Vector2i >
bool operator <( const sf::Vector2i & lhs, const sf::Vector2i & rhs )
{
   
return lhs.x != rhs.x ? lhs.x < rhs.x: lhs.y < rhs.y;
}

std::map < sf::Vector2i, std::wstring > map_terrain_sets;

void createTerrainPrefabs() {
   
   
map_terrain_sets.clear();
   
map_terrain_sets[ sf::Vector2i( 0, 1 ) ] = L"tiles\\set_0_water_sands"; // error
    //map_terrain_sets[sf::Vector2i(1, 0)] = L"tiles\\set_0_sands_water";
    //map_terrain_sets[sf::Vector2i(2, 1)] = L"tiles\\set_1_sands_grass";
    //map_terrain_sets[sf::Vector2i(1, 2)] = L"tiles\\set_1_grass_sands";
   
P-182692
pekfos
» 2025-07-10 18:37:24
Wystarczy żeby była widoczna, pewnie trzeba dać w tej samej przestrzeni nazw
C/C++
namespace sf
{
   
bool operator <( const Vector2i & lhs, const Vector2i & rhs )
   
{
       
return lhs.x != rhs.x ? lhs.x < rhs.x: lhs.y < rhs.y;
   
}
}
P-182696
tBane
Temat założony przez niniejszego użytkownika
» 2025-07-10 18:50:21
Dzięki mistrzu :-)
P-182698
« 1 »
  Strona 1 z 1