That is exactly what all the sets I mentioned do: of course they do not duplicate, because they are sets. Sets only contain unique values by definition. They also need to implement the set operators/functions except maybe symmetric difference.(><)
The latter is not implemented in C++ std library nor in many other sets in different languages. In your case I would use the fcl-stl set or implement one for fgl. That is not difficult, rather basic stuff. implement include, exclude and contains and it is a set. A set needs not be ordered, although Pascal sets are ordered by nature. In C++ the std library is a hash set, because that allows for fast membership determination, given the unordered nature of a mathematical set. All other operants can be done by testing for membership.
Hence you only need the three basics: add/include, remove/exclude, contains. So if you want to stick to fgl, you know what you need to do
Tip: the underlying structure of a set is not an array but a list, you link and unlink elements of a list.
[edit]
In fgl, TFpsMap with duplicates is dupError or dupIgnore is already a set.....
I wanted to implement it for you, but the code is already there.