diff --git a/src/rangemap.rs b/src/rangemap.rs
index 91eef9a8774e8ed5e2b244ead2e6959bf63552b9..8c587167f7f86e5cd9b873a515fdfa449f8a3c46 100644
--- a/src/rangemap.rs
+++ b/src/rangemap.rs
@@ -84,6 +84,23 @@ impl<RK: Ord + Copy, V> RangeMap<RK, V> {
 
         None
     }
+
+    /// Returns all stored ranges, sorted by key.
+    pub fn iter(&self) -> impl Iterator<Item = ((RK, RK), &V)> + '_ {
+        self.ranges
+            .iter()
+            .map(|(&s, value)| ((s, value.0), &value.1))
+    }
+
+    /// Returns the number of elements in the map.
+    pub fn len(&self) -> usize {
+        self.ranges.len()
+    }
+
+    /// Returns whether this map is empty.
+    pub fn is_empty(&self) -> bool {
+        self.ranges.is_empty()
+    }
 }
 
 impl<RK: Ord + Copy, V> Default for RangeMap<RK, V> {
diff --git a/src/rangeset.rs b/src/rangeset.rs
index 49de772cd2cba2fd025f05ee2d767584c1cc1624..f6e52d82077123dcb7c662685c02f7ad9d1a817a 100644
--- a/src/rangeset.rs
+++ b/src/rangeset.rs
@@ -69,7 +69,7 @@ impl<RK: Ord + Copy> RangeSet<RK> {
         false
     }
 
-    /// Returns all stored ranges.
+    /// Returns all stored ranges, sorted by key.
     pub fn iter(&self) -> impl Iterator<Item = (RK, RK)> + '_ {
         self.ranges.iter().map(|(&s, &e)| (s, e))
     }