Tengo un std::vector
con n
elementos. Ahora necesito pasar un puntero a un vector que tiene los últimos elementos n-1
para una función.¿Convertir iterador en puntero?
Por ejemplo, mi vector<int> foo
contiene (5,2,6,87,251)
. Una función toma vector<int>*
y quiero pasarle un puntero a (2,6,87,251)
.
¿Puedo tomar (con seguridad) el iterador ++foo.begin()
, convertirlo en un puntero y pasarlo a la función? O use &foo[1]
?
ACTUALIZACIÓN: La gente sugiere que cambie mi función para tomar un iterador en lugar de un puntero. Eso no parece posible en mi situación, ya que la función que mencioné es la función find
de unordered_set<std::vector*>
. Entonces, en ese caso, ¿está copiando los elementos n-1
de foo
en un nuevo vector y llamando al find
con un puntero a esa única opción? Muy ineficiente! Es como Shlemiel el pintor, especialmente porque tengo que consultar muchos subconjuntos: los últimos elementos n-1
, luego n-2
, etc. y ver si están en el unordered_set
.
¿Podrías explicar un poco más lo que realmente estás tratando de hacer? Estoy un poco confundido: parece que estás tratando de hacer algo con unordered_set <> y unordered_set <> :: find() que no están realmente diseñados para hacer (pero posiblemente no entiendo) . –
¿Por qué está usando un vector para representar un conjunto desordenado en primer lugar? Si está haciendo consultas de membresía múltiple, hay implementaciones mucho más eficientes. Es posible que desee crear un conjunto y luego consultar en contra de él. – Uri
Tengo un conjunto S de secuencias conocidas. Para cada secuencia nueva, debo averiguar rápidamente si está en S o no. Me doy cuenta de que almacenar las secuencias conocidas como vectores separados y almacenar punteros en ellos en unordered_set es una pérdida de memoria, y un trie sería mejor. Pero quería la búsqueda de tiempo constante. – Frank