| ... |
... |
@@ -1699,11 +1699,11 @@
|
| 1699 |
1699 |
/// There are several algorithms that provide solutions through bool
|
| 1700 |
1700 |
/// maps and most of them assign \c true at most once for each key.
|
| 1701 |
1701 |
/// In these cases it is a natural request to store each \c true
|
| 1702 |
1702 |
/// assigned elements (in order of the assignment), which can be
|
| 1703 |
|
/// easily done with StoreBoolMap.
|
|
1703 |
/// easily done with LoggerBoolMap.
|
| 1704 |
1704 |
///
|
| 1705 |
|
/// The simplest way of using this map is through the storeBoolMap()
|
|
1705 |
/// The simplest way of using this map is through the loggerBoolMap()
|
| 1706 |
1706 |
/// function.
|
| 1707 |
1707 |
///
|
| 1708 |
1708 |
/// \tparam It The type of the iterator.
|
| 1709 |
1709 |
/// \tparam Ke The key type of the map. The default value set
|
| ... |
... |
@@ -1716,17 +1716,17 @@
|
| 1716 |
1716 |
#else
|
| 1717 |
1717 |
template <typename It,
|
| 1718 |
1718 |
typename Ke=typename _maps_bits::IteratorTraits<It>::Value>
|
| 1719 |
1719 |
#endif
|
| 1720 |
|
class StoreBoolMap {
|
|
1720 |
class LoggerBoolMap {
|
| 1721 |
1721 |
public:
|
| 1722 |
1722 |
typedef It Iterator;
|
| 1723 |
1723 |
|
| 1724 |
1724 |
typedef Ke Key;
|
| 1725 |
1725 |
typedef bool Value;
|
| 1726 |
1726 |
|
| 1727 |
1727 |
/// Constructor
|
| 1728 |
|
StoreBoolMap(Iterator it)
|
|
1728 |
LoggerBoolMap(Iterator it)
|
| 1729 |
1729 |
: _begin(it), _end(it) {}
|
| 1730 |
1730 |
|
| 1731 |
1731 |
/// Gives back the given iterator set for the first key
|
| 1732 |
1732 |
Iterator begin() const {
|
| ... |
... |
@@ -1749,36 +1749,36 @@
|
| 1749 |
1749 |
Iterator _begin;
|
| 1750 |
1750 |
Iterator _end;
|
| 1751 |
1751 |
};
|
| 1752 |
1752 |
|
| 1753 |
|
/// Returns a \ref StoreBoolMap class
|
|
1753 |
/// Returns a \ref LoggerBoolMap class
|
| 1754 |
1754 |
|
| 1755 |
|
/// This function just returns a \ref StoreBoolMap class.
|
|
1755 |
/// This function just returns a \ref LoggerBoolMap class.
|
| 1756 |
1756 |
///
|
| 1757 |
1757 |
/// The most important usage of it is storing certain nodes or arcs
|
| 1758 |
1758 |
/// that were marked \c true by an algorithm.
|
| 1759 |
1759 |
/// For example it makes easier to store the nodes in the processing
|
| 1760 |
1760 |
/// order of Dfs algorithm, as the following examples show.
|
| 1761 |
1761 |
/// \code
|
| 1762 |
1762 |
/// std::vector<Node> v;
|
| 1763 |
|
/// dfs(g,s).processedMap(storeBoolMap(std::back_inserter(v))).run();
|
|
1763 |
/// dfs(g,s).processedMap(loggerBoolMap(std::back_inserter(v))).run();
|
| 1764 |
1764 |
/// \endcode
|
| 1765 |
1765 |
/// \code
|
| 1766 |
1766 |
/// std::vector<Node> v(countNodes(g));
|
| 1767 |
|
/// dfs(g,s).processedMap(storeBoolMap(v.begin())).run();
|
|
1767 |
/// dfs(g,s).processedMap(loggerBoolMap(v.begin())).run();
|
| 1768 |
1768 |
/// \endcode
|
| 1769 |
1769 |
///
|
| 1770 |
1770 |
/// \note The container of the iterator must contain enough space
|
| 1771 |
1771 |
/// for the elements or the iterator should be an inserter iterator.
|
| 1772 |
1772 |
///
|
| 1773 |
|
/// \note StoreBoolMap is just \ref concepts::WriteMap "writable", so
|
|
1773 |
/// \note LoggerBoolMap is just \ref concepts::WriteMap "writable", so
|
| 1774 |
1774 |
/// it cannot be used when a readable map is needed, for example as
|
| 1775 |
|
/// \c ReachedMap for Bfs, Dfs and Dijkstra algorithms.
|
|
1775 |
/// \c ReachedMap for \ref Bfs, \ref Dfs and \ref Dijkstra algorithms.
|
| 1776 |
1776 |
///
|
| 1777 |
|
/// \relates StoreBoolMap
|
|
1777 |
/// \relates LoggerBoolMap
|
| 1778 |
1778 |
template<typename Iterator>
|
| 1779 |
|
inline StoreBoolMap<Iterator> storeBoolMap(Iterator it) {
|
| 1780 |
|
return StoreBoolMap<Iterator>(it);
|
|
1779 |
inline LoggerBoolMap<Iterator> loggerBoolMap(Iterator it) {
|
|
1780 |
return LoggerBoolMap<Iterator>(it);
|
| 1781 |
1781 |
}
|
| 1782 |
1782 |
|
| 1783 |
1783 |
/// @}
|
| 1784 |
1784 |
}
|