Quanto è onnipresente hash_map?
-
03-07-2019 - |
Domanda
Le intestazioni hash_map
e hash_set
non sono ancora incluse nello standard C ++, ma sono disponibili come estensioni con tutti i compilatori che ho usato di recente.
Mi chiedo quanto posso contare su questi nel vero codice senza sacrificare la portabilità. Sto lavorando a progetti di strumenti che devono essere eseguiti su una serie di architetture e compilatori, tra cui:
- Linux (x86_64, AMD / Intel): compilatori GCC, Intel, Portland
- AIX (Potenza): GCC, xlC
- Cray XT Series (AMD): GCC, Portland, Pathscale Compilers
- IBM Blue Gene Series (Potenza): xlC, GCC
- SGI Altix (Itanium): compilatori Intel
- Windows: Non proprio una priorità, ma sentiti libero di fornire risposte utili.
Mi rendo conto che alcuni di questi sono piuttosto esotici, ma non è questo il punto. Quali sono le tue esperienze con le estensioni STL su più piattaforme e compilatori? Sono ancora onnipresenti? tu li useresti nel tuo progetto?
Soluzione
Probabilmente cerco il boost equivelant e lo uso. Almeno hanno una certa pressione da parte dei loro utenti per essere indipendenti dalla piattaforma. Non riesco a immaginare cosa succederebbe se si presentasse un bug contro i compilatori GCC e Intel e si dicesse loro di conciliare le loro differenze su come è stato implementato hash_map. Nella migliore delle ipotesi, potresti farli parlare tra loro. Supponi di averlo persino capito, quindi hai risolto solo il modo in cui i compilatori Intel e GCC sono diversi. Buona fortuna per riunire tutti gli altri e risolvere il problema in pochi anni.
Almeno con boost sai che eventuali differenze tra le piattaforme sono state elaborate da un'organizzazione ..
Modifica L'equivalente boost è apparentemente set non ordinato o < a href = "http://www.boost.org/doc/libs/1_37_0/doc/html/boost/unordered_map.html" rel = "noreferrer"> mappa non ordinata . (grazie Head Geek)
Altri suggerimenti
NO, scriveresti il ??tuo se sei un'organizzazione / progetto abbastanza grande. In questo modo puoi personalizzarli per soddisfare meglio le tue esigenze e affrontare i problemi di portabilità. EA ha fatto questo, con il suo "eastl" destinato a tutte le piattaforme di gioco, PC, Mac, XBOX360, Wii, PS2, PS3 ecc ...