### Author Topic: Help with unordered set using vertex  (Read 2061 times)

0 Members and 1 Guest are viewing this topic.

#### MacroAhi

• Newbie
• • Posts: 1 ##### Help with unordered set using vertex
« on: June 01, 2021, 12:55:36 am »
hello,
I'm trying to implement a version of Achtung die Kurve,
i'd like to store every line in std::unordered set
so if there's a collision i could tell a player its lost
every player is a line that add each point to the end.
its not working because i couldn't succeeded doing hash and equal function of vertices.
latest sfml, visual studio 2017

Code: [Select]
`#pragma once#include <SFML/Graphics.hpp>#include <unordered_set>#include <functional>size_t hash(const sf::Vertex& vertex) { std::size_t seed = 0; seed ^= std::hash<unsigned int>()((unsigned int)vertex.position.x) + 0x9e3779b9 + (seed << 6) + (seed >> 2); seed ^= std::hash<unsigned int>()((unsigned int)vertex.position.y) + 0x9e3779b9 + (seed << 6) + (seed >> 2); return seed;};bool equal(sf::Vertex const& lhs, sf::Vertex const& rhs){ return lhs.position.x == rhs.position.y && lhs.position.y == rhs.position.y;};class VertexSet : public sf::Drawable{public: VertexSet();private: using equal_type = bool (*)(const sf::Vertex&, const sf::Vertex&); using hash_type = std::size_t(*)(const sf::Vertex&); std::unordered_set<sf::Vertex, hash_type, equal_type> m_vertices = std::unordered_set<sf::Vertex, hash_type, equal_type>(0, hash, equal); sf::PrimitiveType m_primitiveType;};`its not working actually,
error represents:
Code: [Select]
`Severity Code Description Project File Line Suppression StateError LNK2005 "bool __cdecl equal(class sf::Vertex const &,class sf::Vertex const &)" (?equal@@YA_NAEBVVertex@sf@@0@Z)`I want to have a set of points that i can draw the things,
fast insertion and find
thank you
« Last Edit: June 01, 2021, 01:12:10 am by MacroAhi »

#### Laurent

• Hero Member
•     • • Posts: 32502 ##### Re: Help with unordered set using vertex
« Reply #1 on: June 01, 2021, 08:06:46 am »
Hi

Don't copy the error panel, it lacks the most important: the error message. Copy the compiler output directly. LNK2005 is the "symbol defined multiple times" linker error: your functions are defined in a header and are not declared inline; therefore, there's one separate definition in each .cpp file your header is included in, and the linker doesn't like to deal with several definitions for a single symbol.

But storing vertices in a std::unordered_set is really a bad idea in my opinion. "fast insertion and find": at what rate? How many items does your set contain? If it's not a million operations per second then it's not worth the troubles. Moreover, there are more dedicated (and more efficient) data structures for spatial search, like quad trees for example.
Laurent Gomila - SFML developer