 		self.init()
         insert(elements)
 	}
-	
-	public func makeIterator() -> SortedDictionary.Iterator {
+    
+    fileprivate init(tree : RedBlackTree<Key, Value>) {
+        self.init()
+        self.tree = tree
+    }
+	
+	public func makeIterator() -> Iterator {
     var i = indices.makeIterator()
     return AnyIterator { i.next().map { self[$0] } }
 	}

		return tree.description
	}
	
	/// Get the first (key, value) pair.
	public var first: (key: Key, value: Value?)? {
		return tree.first
	}
	
	/// Get the last (key, value) pair.
	public var last: (key: Key, value: Value?)? {
		return tree.last
	}
	
	/// A boolean of whether the SortedDictionary is empty.
	public var isEmpty: Bool {
		return 0 == count
	}
	
	/// Conforms to the Collection Protocol.
	public var startIndex: Int {
		return 0

    /**
     Searches for given keys in the SortedDictionary.
     - Parameter for keys: An Array of Key types.
     - Returns: A SortedDictionary.
     */
    public func search(for keys: [Key]) -> SortedDictionary<Key, Value> {
		var d = SortedDictionary<Key, Value>()
