unorder_map in C++ Builder 10 Seattle



  • Hallo,

    ich versuche folgenden Code zum laufen zu bringen. Leider meckert der Compiler aber die unordered_map an. Kann mir jemand helfen?

    #include <list>
    #include <unordered_map>
    #include <vcl.h>
    
    using namespace std;
    class LRUCache {
    	public:
    
    		typedef list<pair<int, int> >::iterator list_itr;
    		LRUCache(int cap = 1) : capacity(cap), cache(), itrs() { }
    
    		int get(int key) {
    			if (itrs.find(key) == itrs.end()) return -1;
    			promote(itrs[key]);
    			return itrs[key]->second;
    		}
    
    		void set(int key, int value) {
    			if (itrs.find(key) != itrs.end()) {
    				itrs[key]->second = value;
    				promote(itrs[key]);
    				return ;
    			}
    			if (itrs.size() >= capacity) {
    				auto itr = itrs.find(cache.back().first);
    				cache.pop_back();
    				itrs.erase(itr);
    			}
    			cache.push_front(make_pair(key, value));
    			itrs[key] = cache.begin();
    		}
    	private:
    		void promote(list_itr loc) {
    			cache.push_front(make_pair(loc->first, loc->second));
    			itrs[loc->first] = cache.begin();
    			cache.erase(loc);
    		}
        private:
    		list<pair<int, int> > cache;
    
    		unordered_map<int, list_itr > itrs;
            int capacity;
    };
    

    [bcc32 Fehler] uCache.h(47): E2303 Typname erwartet
    Vollständiger Parser-Kontext
    uCache.cpp(5): #include uCache.h
    uCache.h(12): class LRUCache



  • Scheint es erst ab C++11 zu geben und wird daher nicht vom klassischen Compiler (bcc32) unterstützt.



  • Kerem schrieb:

    Scheint es erst ab C++11 zu geben und wird daher nicht vom klassischen Compiler (bcc32) unterstützt.

    Doch, wird es, benutze:

    std::tr1::unordered_map<int, list_itr > itrs;
    

    tr1 steht für "Technical Report 1"

    https://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1



  • Omg thx!

    und ich hab noch tr1 und std ausprobiert, aber auf std::tr1 bin ich nicht gekommen 😉


Anmelden zum Antworten