[Insight-users] Defining a map of IndexTypes
Luis Ibanez
luis.ibanez at kitware.com
Wed Oct 28 07:24:19 EDT 2009
mm, Interesting...
Could you advice Matthias on what
the original compilation error is then ?
Maybe he is not passing the pointer
to the function ?
Thanks
Luis
-----------------------------------------------------------------------
On Wed, Oct 28, 2009 at 12:30 AM, Karthik Krishnan
<karthik.krishnan at kitware.com> wrote:
> Luis:
>
> The comparator can not only be a class (functor), but It can also be a
> function pointer with the exact signature that Matt described. In the
> latter case, the function pointer type is the third template argument
> and the function pointer must be passed in via the constructor.
>
> thx
> --
> karthik
>
>
> On Tue, Oct 27, 2009 at 10:10 PM, Luis Ibanez <luis.ibanez at kitware.com> wrote:
>> Hi Matthias,
>>
>> You are mis-constructing the map type.
>>
>> The code that you need is like the following:
>>
>> --------------------------------------------------------------------------
>> #include "itkImage.h"
>>
>> template <class TImageType>
>> class TEST
>> {
>> typedef typename TImageType::IndexType IndexType;
>>
>> struct ltstr
>> {
>> bool operator()(const IndexType& lhs, const IndexType& rhs) const
>> {
>> //y1 is lower y2
>> if(lhs[1]<rhs[1])return true;
>> //y1==y2 and x1 < x2
>> if((lhs[1]==rhs[1])&&(lhs[0]<rhs[0]))return true;
>> //else
>> return false;
>> }
>> };
>>
>>
>> std::map<IndexType, bool, ltstr> recursionPoints;
>>
>> };
>>
>> int main()
>> {
>> return 0;
>> }
>>
>>
>>
>> Note that the comparator, the third template argument
>> of the std::map is actually a class, that has a method
>> operator().
>>
>> More at:
>> http://www.sgi.com/tech/stl/Map.html
>>
>>
>> Regards,
>>
>>
>> Luis
>>
>>
>> ---------------------------------
>> On Tue, Oct 27, 2009 at 12:00 PM, Matthias Dodt
>> <matthias.dodt at mdc-berlin.de> wrote:
>>> Hi there!
>>>
>>> I want to store IndexTypes in a map (as keys). I got the following code:
>>> ...
>>>
>>> typedef typename TImageType::IndexType IndexType;
>>>
>>> bool fless(const IndexType& lhs, const IndexType& rhs) const
>>> {
>>> //y1 is lower y2
>>> if(lhs[1]<rhs[1])return true;
>>> //y1==y2 and x1 < x2
>>> if((lhs[1]==rhs[1])&&(lhs[0]<rhs[0]))return true;
>>> //else
>>> return false;
>>> }
>>>
>>> typedef bool (*comp_t)( IndexType const &, IndexType const & );
>>>
>>> std::map<IndexType, bool, comp_t> recursionPoints(fless);
>>>
>>> ...
>>>
>>> Anyway- i get an error saying that fless has no type. I think the problem is
>>> that IndexType is a template type...
>>>
>>> thanks!
>>>
>>>
>>> _____________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://www.kitware.com/products/protraining.html
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.itk.org/mailman/listinfo/insight-users
>>>
>> _____________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.html
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-users
>>
>
More information about the Insight-users
mailing list