     }
     
     /// Remove a given key and the associated value from the dictionary. Returns the value that was removed, or nil if the key was not present in the dictionary.
-    mutating func removeValueForKey(key: Key) -> Value? {
+    public mutating func removeValueForKey(key: Key) -> Value? {
         guard let value = _dictionary.removeValueForKey(key) else { return nil }
         
         if let index = keys.indexOf(key) {

    }
    
    /// Removes all elements.
    mutating func removeAll(keepCapacity keepCapacity: Bool = false) {
        _dictionary.removeAll(keepCapacity: keepCapacity)
        keys.removeAll(keepCapacity: keepCapacity)
    }
    
    /// Remove the key-value pair at index.
    mutating func removeAtIndex(index: Index) -> Element? {
        let key = keys[index]
        let value = _dictionary.removeValueForKey(key)
        


import Foundation

public struct OrderedDictionary<Key: Hashable, Value>: CollectionType, DictionaryLiteralConvertible, CustomStringConvertible, CustomDebugStringConvertible, RangeReplaceableCollectionType {
    // MARK: - Associated Types
    public typealias Index = Int
    
