Skip to content
Snippets Groups Projects
unordered_map.hpp 1.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * unordered_map.hpp
     *
     * Created on: Feb 28, 2014
     * Author: Jan Travnicek
     */
    
    #ifndef __UNORDERED_MAP_HPP_
    #define __UNORDERED_MAP_HPP_
    
    namespace std {
    
    
    template< class T, class R, class ... Ts >
    std::ostream& operator<<(std::ostream& out, const std::unordered_map<T, R, Ts ... >& map) {
    
    	out << "{";
    
    	bool first = true;
    
    	for(const std::pair<const T, R>& item : map) {
    
    		if(!first) out << ", ";
    		first = false;
    		out << item;
    	}
    
    	out << "}";
    	return out;
    }
    
    
    template<class T, class R, class ... Ts>
    struct compare<unordered_map<T, R, Ts ...>> {
    	int operator()(const unordered_map<T, R, Ts ...>& first, const unordered_map<T, R, Ts ...>& second) const {
    
    		if(first.size() < second.size()) return -1;
    		if(first.size() > second.size()) return 1;
    
    
    		static compare<typename std::decay < R >::type > comp;
    
    		for(auto iter = first.begin(); iter != first.end(); ++iter) {
    
    			auto search = second.find(iter->first);
    			if(search == second.end()) return -1;
    			int res = comp(iter->second, search->second);
    			if(res != 0) return res;
    		}
    		return 0;
    	}
    };
    
    
    template < class T, class R >
    string to_string ( const std::unordered_map < T, R > & value ) {
    	std::stringstream ss;
    	ss << value;
    	return ss.str();
    }
    
    
    } /* namespace std */
    
    #endif /* __UNORDERED_MAP_HPP_ */