Is there any way or library to have a set in solidity that can be iterated like C++'s std::set?
library Set {
// We define a new struct datatype that will be used to
// hold its data in the calling contract.
struct Data { mapping(string => bool) flags; }
// Note that the first parameter is of type "storage
// reference" and thus only its storage address and not
// its contents is passed as part of the call. This is a
// special feature of library functions. It is idiomatic
// to call the first parameter `self`, if the function can
// be seen as a method of that object.
function insert(Data storage self, string memory value)
public
returns (bool)
{
if (self.flags[value])
return false; // already there
self.flags[value] = true;
return true;
}
function remove(Data storage self, string memory value)
public
returns (bool)
{
if (!self.flags[value])
return false; // not there
self.flags[value] = false;
return true;
}
function contains(Data storage self, string memory value)
public
view
returns (bool)
{
return self.flags[value];
}
}
This is an implementation I found but this struct can not be iterated
Best Answer
The closest thing you can have is using a mapping and an array, a bit like you did.