hey...@gmail.com writes:
> Le mardi 25 septembre 2012 13:01:02 UTC+2, Marc Boyer a écrit :
>
>> Sinon, quelle est l'autre objectif que tu n'as pas donné ?
> Je veux juste ranger dans un container des intervalles disjoints. Mais
> je veux aussi pouvoir, lors de l'insertion d'un intervalle quelconque,
> vérifier s'il recouvre un ou plusieurs intervalles déjà insérés auquel
> cas il me faut retirer ces intervalles, calculer les intersections,
> construire autant d'intervalles disjoints, puis réinsérer ces nouveaux
> intervalles.
Pour le coup, c'est moi qui n'avais pas totalement compris.
Tu peux utiliser des arbres d'intervalle, mais c'est un peu dommage si
les intervalles sont vraiment disjoints : dans ce cas, la borne inf (ou
sup) suffit pour garder l'ordre, et tu peux utiliser (a.right <
b.left || b.right < a.left ) pour la comparaison.
Par contre, tu as une opération (qui n'est pas find) qui consiste à
chercher tous les intervalles qui intersectent le nouveau[a,b]. Il doit
y avoir un moyen de faire ça avec lower_bound([-infini,b]) et
upper_bound([a,+infini]). Ensuite il faut traverser ce "range" et
tester. Je dis ça sans avoir vraiment réfléchi.
> Je ne connaissais pas les "arbres d'intervalle" d'Alain, peut être
> est-ce un cas particulier de ces conteneurs. Il faut que je regarde de
> plus près car ça pourrait m'éviter beaucoup de code.
Je n'y suis pour rien :-)
> @Alain: j'avais lu la doc sur les intervalles de Boost, et je n'y ai
> vu nul part la mention "strict weak ordering". De fait, ça n'est pas
> possible car il faut que les intervalles soient disjoints. ils
> fournissent un comparateur approchant, qui jette une exception lorsque
> la comparaison est indécidable, mais ça n'est pas utilisable dans un
> map pour autant.
C'est une notion utilisée par la STL (un concept), je ne suis pas sûr
que tout le monde y fasse référence.
-- Alain.