2010-03-29 6 views
4
string Haystack[] = { "Alabama", "Alaska", "American Samoa", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "District of Columbia", 
       "Florida", "Georgia", "Guam", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", 
       "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", 
       "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Northern Mariana Islands", "Ohio", "Oklahoma", 
       "Oregon", "Pennsylvania", "Puerto Rico", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "US Virgin Islands", "Utah", 
       "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"}; 

string Needle = "Virginia"; 

if(std::binary_search(Haystack, Haystack+56, Needle)) 
     cout<<"Found"; 

Si je voulais aussi trouver l'emplacement de l'aiguille dans le tableau de chaînes, est-il un moyen « facile » pour savoir?C++ chaîne matrice de recherche binaire

Répondre

5

De l'SGI docs:

Notez que ce n'est pas nécessairement l'information qui vous intéresse! Habituellement, si vous testez si un élément est présent dans une plage, vous aimeriez savoir où il se trouve (s'il est présent), ou où il devrait être inséré (s'il n'est pas présent). Les fonctions lower_bound, upper_bound et equal_range fournissent cette information.

Je pense que le raisonnement derrière cette série d'interfaces est que binary_search n'indique pas vraiment si elle va revenir au début de la plage des matches (en supposant qu'il ya matches) ou la fin de la plage, et vous peut vouloir l'un ou l'autre selon que vous voulez faire quelque chose avec des données déjà dans le conteneur ou ajouter un nouvel élément (éventuellement à la fin de la plage de correspondance). Ou vous pourriez vouloir passer toute la gamme à autre chose. D'où les différentes interfaces plus ou moins spécifiques pour effectuer une recherche binaire.

Malheureusement, vous n'êtes pas particulièrement susceptible de trouver les autres si vous pensez: «J'ai besoin d'une routine de recherche binaire».

+0

+1 @ Michael Man ma réponse était tout à fait tort :) – AraK